SQL Left Join Oddity

时间:2015-03-18 08:37:41

标签: sql left-join

考虑以下表格

sessions                   users
========                   =====
id uid sid                 id name
----------                 -------
7  1   192.168.0.10        1  AAA
8  2   NULL                2  BBB
12 2   192.168.0.13        3  CCC
15 20  NULL

为什么

SELECT u.name FROM `users` u 
LEFT JOIN sessions s 
ON u.id=s.uid 
WHERE s.sid IS NULL

返回

BBB
CCC

当第二个uid无效时,为什么会重新调整CCC 。我期待NULL 请注意,我不想修复查询,只是为了理解结果。

2 个答案:

答案 0 :(得分:3)

您不需要LEFT JOIN,因为您不关心不匹配:

SELECT u.name
FROM `users` u JOIN
     sessions s 
     ON u.id = s.uid 
WHERE s.sid IS NULL;

答案 1 :(得分:1)

查询要求的是任何没有会话或者会话未被分配s.sid值的用户。