Oracle SQL Query从两个连接表中获取缺少日期

时间:2013-06-20 17:38:53

标签: oracle

我正在尝试编写Oracle SQL查询,但我无法获得正确的结果。

对于下表,我想首先从DEVICE获取DEVICE.MODEL ='UNITA'的所有记录,对于这些结果,给我DEVICE.CUSTOMER_ID,其中没有记录,其中PROFILE.TYPE =' TEST'在CUSTOMER_ID上加入两个表。有关如何制定此查询的任何想法?

TABLE DEVICE:
ID - sequence generated primary key (NUMBER (10))
DEVICE_NUMBER - unique (varchar)
CUSTOMER_ID (varchar)
MODEL (varchar)

TABLE PROFILE:
ID - sequence generated primary key (NUMBER (10))
CUSTOMER_ID (varchar)
TYPE (varchar)

1 个答案:

答案 0 :(得分:1)

如果我理解这个要求,这应该可以解决问题:

SELECT d.ID, d.Device_Number, d.Customer_ID, d.Model
FROM Device d
LEFT JOIN Profile p ON d.Customer_ID = p.Customer_ID
WHERE d.Model = 'UNITA'
  AND (p.ID IS NULL OR p.Type = 'TEST')

它的工作原因是LEFT JOIN,如果Profile.ID没有匹配的Profile行,则会Customer_ID为空。如果有匹配的行,Profile.Type = 'TEST'的测试将确定包含的内容。

有一个SQL小提琴here。小提琴包含结果中的Profile.IDProfile.Type值,因为我认为它们有助于更清楚地解释事物。


附录:我对这些要求有些困惑;此查询可能更接近所需内容:

SELECT d.ID, d.Device_Number, d.Customer_ID, d.Model, p.id AS pid, p.type
FROM Device d
LEFT JOIN Profile p ON d.Customer_ID = p.Customer_ID AND p.Type = 'TEST'
WHERE d.Model = 'UNITA'
  AND p.ID IS NULL