我有两个表,我希望在不交叉连接的情况下从中获取结果以获取重复数据。
表 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
子句中使用逗号。
我添加了表别名;使查询更易于编写和阅读。
关于php - Mysql - 避免Cross Join不获取多个重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27348448/