У меня есть две таблицы, из которых я хотел бы получить результаты без перекрестного соединения для получения дубликатов данных.
Таблица 1: booksCheckedOut
row | userID | book | date
-------------------------------------------------
1 | 3 | book1 | Jan-26
2 | 3 | book2 | Jan-27
3 | 3 | book3 | Jan-28
4 | 3 | book4 | Jan-29
Table2: numberOfPagesRead
row | userID | name | date | pagesRead
-----------------------------------------------------------------
1 | 3 | John | Jan-26 | 4
2 | 3 | John | Jan-27 | 7
3 | 3 | John | Jan-28 | 8
Я делаю SQL-запрос, который выглядит следующим образом:
select booksCheckedOut.book, numberOfPagesRead.pagesRead
from booksCheckedOut, numberOfPagesRead
where booksCheckedOut.userID='3' and numberOfPagesRead.userID='3'
Но я получаю результаты, которые выглядят так: Строки умножаются (4 x 3 = 12 результатов)
book | pagesRead |
-------------------------
book1 | 4 |
book1 | 7 |
book1 | 8 |
book2 | 4 |
book2 | 7 |
book2 | 8 |
book3 | 4 |
book3 | 7 |
book3 | 8 |
book4 | 4 |
book4 | 7 |
book4 | 8 |
Это то, что я хочу:
book | pagesRead |
-------------------------
book1 | 4 |
book2 | 7 |
book3 | 8 |
book4 | |
Как предотвратить умножение результатов (перекрестное соединение)?
Я знаю, что это не имеет смысла, но я не хочу связывать количество прочитанных страниц с конкретной книгой, это просто способ, которым текущая база данных уже настроена.
Заранее спасибо!
Казалось бы, UserId
а также date
ключи, соединяющие эти таблицы:
select co.book, nopr.pagesRead
from booksCheckedOut co join
numberOfPagesRead nopr
on co.userId = nopr.UserId and co.date = nopr.date
where co.userID = '3';
Вы должны научиться правильно join
синтаксис. Простое правило: Никогда используйте запятые в from
пункт.
Я добавил псевдонимы таблиц; сделать запросы легче писать и читать.
Других решений пока нет …