Mysql - 避免交叉联接,以免获取多个重复数据


Mysql - Avoid Cross Join to not get multiple duplicate data

我有两个表,我想从中获取结果而无需交叉连接以获取重复数据。

表 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      |            |

如何防止结果相乘(交叉联接)?

我知道这毫无意义,但我不想将阅读的页数与特定书籍相关联,这只是当前数据库已经设置的方式。

提前感谢!

看起来UserIddate是连接这些表的键:

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子句中使用逗号。

我添加了表别名;使查询更易于编写和读取。