MySQL左连接缺少结果
我试图查看是否有一些未使用的SIP编号,因此在tmp_编号表中有一个编号列表 我使用的查询是:MySQL左连接缺少结果,mysql,left-join,Mysql,Left Join,我试图查看是否有一些未使用的SIP编号,因此在tmp_编号表中有一个编号列表 我使用的查询是: SELECT n.number, COUNT(c.did) AS count FROM tmp_numbers n LEFT JOIN cdr c ON n.number = c.did WHERE c.calldate >= '2017-01-01' GROUP BY n.number ORDER BY n.number 我从上面的查询中得到了结果,但它忽略了在c上无法匹配
SELECT
n.number,
COUNT(c.did) AS count
FROM tmp_numbers n
LEFT JOIN cdr c
ON n.number = c.did
WHERE c.calldate >= '2017-01-01'
GROUP BY n.number
ORDER BY n.number
我从上面的查询中得到了结果,但它忽略了在c上无法匹配的数字
我的印象是,左连接将匹配/显示左表上的所有内容(tmp_编号),而不管右侧是否有值(因此将显示NULL?)
这里缺少什么?将
where
条件放入左连接中。否则它会隐式地变成一个内部联接
,因为where
子句中的条件会过滤所有数据,如果calldate
为NULL,则该条件为FALSE
LEFT JOIN cdr c ON n.number = c.did
AND c.calldate >= '2017-01-01'
将where
条件置于左连接中。否则它会隐式地变成一个内部联接
,因为where
子句中的条件会过滤所有数据,如果calldate
为NULL,则该条件为FALSE
LEFT JOIN cdr c ON n.number = c.did
AND c.calldate >= '2017-01-01'
您正在查询联接的
表中的一列,如果没有相应的条目,该列可能为null
,因此将WHERE
条件从:
其中c.calldate>=“2017-01-01”
到
其中c.calldate>='2017-01-01'或c.did为空
您正在查询联接的
表中的一列,如果没有相应的条目,该列可能为空
,因此将WHERE
条件更改为:
其中c.calldate>=“2017-01-01”
到
其中c.calldate>='2017-01-01'或c.did为空