php - Mysql - 避免Cross Join不获取多个重复数据

标签 php mysql join cross-join

我有两个表,我希望在不交叉连接的情况下从中获取结果以获取重复数据。

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

如何防止结果成倍增加(交叉连接)?

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

提前致谢!

最佳答案

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

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

关于php - Mysql - 避免Cross Join不获取多个重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27348448/

相关文章:

PHP:在不知道原始字符集的情况下将任何字符串转换为 UTF-8,或者至少尝试一下

php - 在php中获取mysql时区

php mysql 从数据库中检索上传的照片

CakePHP 在每个表上查找带有条件的连接记录

sql-server - 对多列进行 JOIN 时使用索引

php - 使用 PHP 将数据从 SQl 导出到 Excel

php - 从表中获取数据并将其显示在 Bootstrap 表中

MySQL 连接查询

sql - 同时对查询进行排序和随机化

php - 我们如何从 mysql 数据库中的表中获取不匹配的值