Oracle SQL:检查条目是否存在,如果不存在则返回

时间:2019-10-23 20:09:49

标签: sql oracle

我想根据第二张表中的值检查一个表中是否存在条目,但是如果不存在,则从第二张表中选择该值。

为说明起见,我有一个名为devices的表和一个名为tests的表。 devices中的每个设备都有一个唯一的标识符(整数)。 tests中的每个测试都引用运行测试的设备的唯一标识符。因此,每个test与一个device相关联。但是,并非每个device都经过测试。而且,可以在单个设备上运行多个测试。

所以我要SELECT的是devices中的所有条目,而tests中的至少一个条目未对其进行引用。

3 个答案:

答案 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来获得所需的结果(假设iddevices中的唯一标识符,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的初学者吗? :)