考虑以下表格
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
请注意,我不想修复查询,只是为了理解结果。
答案 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值的用户。