mysql - 带条件的左外连接

标签 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,它将返回当前未分配给特定 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/

相关文章:

ruby-on-rails - 多个左连接与 rails 4

php - 从 mysql 数据库填充下拉列表并且不重复值

php - MySQL 连接或嵌套循环

mysql - 无法从 Node 但从终端访问mysql容器

sql - 计算出重叠 er 数据库中的总人数

mysql - Buggy 加入 CodeIgniter ActiveRecord

mysql - 如何在 Mysql 中获取最近的行?

python - 为什么 Python MySQLdb 中的 executemany 很慢?

php - 如何防止 PHP 中的 SQL 注入(inject)?

c# - 将位值写入数据库