【发布时间】:2016-08-29 12:58:24
【问题描述】:
我有 2 张桌子:
Devices (id (PK))
Links (id (PK), device_id_1 (FK), device_id_2 (FK))
代表通过链接连接的设备。
我需要选择与给定设备连接的所有设备(可以是 device_id_1 或 device_id_2)。我尝试使用以下查询来做到这一点:
select d2.*
from Devices as d1
left outer join Links as l on d1.id in (l.device_id_1, l.device_id_2)
left outer join Devices as d2 on d2.id in (l.device_id_1, l.device_id_2)
where d1.id = 398 and d2.id <> 398;
但只要我添加第二个JOIN,查询就会返回零行。我做错了什么?
【问题讨论】:
-
将 d2.id 398 作为 AND 条件移动到连接条件。您正在使用当前方法否定左连接;本质上使它成为一个内部连接。一个不太优雅的方法是在 d2.id 上检查 null
-
似乎您可以仅使用链接表来执行此操作。 Devices 表中是否还有除了 id 之外的其他数据?
标签: sql postgresql join