左外连接有条件

时间:2013-12-10 16:53:58

标签: mysql sql left-join outer-join

我已经做了很多关于如何做到这一点并且找不到任何东西的研究。我不认为我想做的事情太难了,但我不知道从哪里开始想发布这个问题。

我有两个表,一个(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,它将所有设备从当前未分配的DEVICES返回到特定的user_id。例如,为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的帮助将不胜感激!谢谢:))

1 个答案:

答案 0 :(得分:1)

您希望在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;
相关问题