我有两个表,我希望在没有交叉连接的情况下获得结果以获取重复数据。
表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
表2: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 | |
如何防止结果成倍增加(交叉加入)?
我知道这没有意义,但我不想将阅读的页数与特定的书籍联系起来,这只是当前数据库的设置方式。
提前致谢!
答案 0 :(得分:2)
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
子句中使用逗号。
我添加了表别名; make查询更容易编写和阅读。