我正在尝试编写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)
答案 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.ID
和Profile.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