我想根据第二张表中的值检查一个表中是否存在条目,但是如果不存在,则从第二张表中选择该值。
为说明起见,我有一个名为devices
的表和一个名为tests
的表。 devices
中的每个设备都有一个唯一的标识符(整数)。 tests
中的每个测试都引用运行测试的设备的唯一标识符。因此,每个test
与一个device
相关联。但是,并非每个device
都经过测试。而且,可以在单个设备上运行多个测试。
所以我要SELECT
的是devices
中的所有条目,而tests
中的至少一个条目未对其进行引用。
答案 0 :(得分:4)
所以我要选择的是设备中的所有条目,这些条目在测试中至少没有一个条目未被引用。
假设以下数据结构:
devices(id)
tests(id, device_id)
您可以使用not exists
:
select d.*
from devices
where not exists (
select 1
from tests t
where t.device_id = d.id
)
或左联接反模式:
select d.*
from devices d
left join tests t on t.device_id = d.id
where t.id is null
答案 1 :(得分:0)
您可以使用简单的NOT IN
来获得所需的结果(假设id
是devices
中的唯一标识符,device_id
是{{1}的外键devices.id
中的},并且tests
具有tests.device_id
属性:
NOT NULL
这应该适用于大多数主要的RDBMS”;由于您尚未指定使用的是哪个,因此里程可能会有所不同。
答案 2 :(得分:0)
谢谢,那行得通。我承认,我更改了上面表格的名称,以使其更容易提出问题,但这是我得出的结论,并且可以正常工作:
SELECT DEVICE.ID
FROM DEVICE
WHERE DEVICE.ID NOT IN (
SELECT TEST.DEVICEID FROM TEST WHERE TEST.DEVICEID=DEVICE.ID)
ORDER BY DEVICE.ID
简单到最后。不能说我是SQL的初学者吗? :)