MySQL的左连接丢失的结果
问题描述:
我想看看我是否有一些未使用的SIP号码,所以我有号码的列表在表tmp_numbersMySQL的左连接丢失的结果
0203XXXXX00
0203XXXXX01
0203XXXXX02
0203XXXXX03
...
我使用的查询是:
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.did上无法匹配的数字。
我的印象是一个LEFT JOIN将匹配在/显示在左表(tmp_numbers)的一切,无论是否有在右边的值(所以它会显示NULL?)
我是什么在这里失踪?
答
将where
条件置于left join
中。否则,它变成隐入inner join
,因为在所有的数据where
条款过滤器,如果calldate
条件为NULL,则条件为FALSE
LEFT JOIN cdr c ON n.number = c.did
AND c.calldate >= '2017-01-01'
答
您从JOINED
表,如果有可能null
查询在列
WHERE c.calldate >= '2017-01-01'
到
:没有相应的条目,所以从改变WHERE
条件
WHERE c.calldate >= '2017-01-01' OR c.did IS NULL