SQL 左连接异常

SQL Left Join Oddity

考虑下表

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

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

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

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

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