我有两个表,我想从中获取结果而无需交叉连接以获取重复数据。
表 1:书籍已签出
row | userID | book | date
-------------------------------------------------
1 | 3 | book1 | Jan-26
2 | 3 | book2 | Jan-27
3 | 3 | book3 | Jan-28
4 | 3 | book4 | Jan-29
表2:读取的页数
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
子句中使用逗号。
我添加了表别名;使查询更易于编写和读取。