mysql - 两个 SQL 连接,两个不同的结果

标签 mysql sql

这两个查询怎么可能不同。我的意思是第一个查询不包括我左表中的所有行,所以我将条件放在连接部分。

查询 1

SELECT COUNT(*) as opens, hours.hour as point 
FROM hours 
LEFT OUTER JOIN tracking ON hours.hour = HOUR(FROM_UNIXTIME(tracking.open_date)) 
WHERE tracking.campaign_id = 83 
AND tracking.open_date < 1299538799 
AND tracking.open_date > 1299452401 
GROUP BY hours.hour

查询 2

SELECT COUNT(*) as opens, hours.hour as point 
FROM hours 
LEFT JOIN tracking ON hours.hour = HOUR(FROM_UNIXTIME(tracking.open_date)) 
AND tracking.campaign_id = 83 
AND tracking.open_date < 1299538799 
AND tracking.open_date > 1299452401 
GROUP BY hours.hour

不同之处在于第一个查询给了我 18 行,其中点 17 到 22 之间没有行。但是当我运行第二个查询时,它显示了完整的 24 行,但是对于 17 到 22 之间的行它有一个值1!我会期望它是 0 还是 NULL?如果它真的是 1,它应该不会出现在第一个查询中吗?

这是怎么发生的?

最佳答案

第一个 JOIN 实际上是一个 INNER JOIN,外连接表不应该像在顶部查询中那样出现在 WHERE 子句中,而不是 COUNT(*),从外连接表中选择一列

关于mysql - 两个 SQL 连接,两个不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5224034/

相关文章:

mysql - 如何为 Zend FrameWork 格式化 Mysql 查询?

MySQL 对查询返回的行进行计数和排序

mysql - 选择一列是另一列的一部分

mysql - 博客和作者之间的 SQL 关系

sql - SQL(ORACLE):具有2个或更多相关/成对的容器查询“指针”的内部查询

MySQL distinct查询返回有重复信息的行,需要去重

php - Mysql Insert into复制数据

MySQL 左外连接和合并结果

java - JDBC MySQL自动将localhost转为127.0.0.1

SQL SELECT 连接?