我已经对如何做到这一点做了很多研究,但没有找到任何东西。我不认为我想做的事情太难,但我不知道从这里到哪里去,并想发布这个问题。
我有两个表,一个 (DEVICE) 是设备表,另一个 (USER_DEVICE) 将用户映射到设备(通过此映射表为用户分配设备):
DEVICE USER_DEVICE
id user_id device_id
------ ------- ----------
1 1 1
2 1 2
3 1 5
4 2 3
5
6
我正在尝试创建一个 LEFT OUTER JOIN,它将返回当前未分配给特定 user_id 的 DEVICES 中的所有设备。例如,对 user_id 1 运行此查询应返回
DEVICE
id
------
3
4
6
对 user_id 2 运行此查询应该返回
DEVICE
id
------
1
2
4
5
6
我创建了以下 LEFT OUTER JOIN,它成功返回以下内容
SELECT id FROM DEVICE d LEFT OUTER JOIN USER_DEVICE ud ON d.id = ud.device_id WHERE ud.device_id IS null;
DEVICE
id
------
4
6
我不确定在上面的sql中哪里需要包含user_id=1语句。我需要的是以下效果:
SELECT id FROM DEVICE d LEFT OUTER JOIN USER_DEVICE ud ON d.id = ud.device_id WHERE ud.user_id=1 AND ud.device_id IS null;
但这不会返回任何行。任何有关如何使用条件语句查找特定 user_id 进行 LEFT OUTER JOIN 的帮助将不胜感激!谢谢:)
最佳答案
您希望在 on
子句中包含设备上的条件:
SELECT id
FROM DEVICE d LEFT OUTER JOIN
USER_DEVICE ud
ON d.id = ud.device_id and
ud.user_id = 1
WHERE ud.device_id IS null;
关于mysql - 带条件的左外连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20500412/