0

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

对于下表,我想首先从 DEVICE 中获取 DEVICE.MODEL='UNITA' 的所有记录,对于这些结果,给我没有 PROFILE.TYPE='TEST' 的记录的 DEVICE.CUSTOMER_ID 加入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)
4

1 回答 1

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,它将为NULL 。如果有匹配的行,测试将确定包含的内容。Profile.IDProfileCustomer_IDProfile.Type = 'TEST'

这里有一个 SQL Fiddle 。Fiddle 在结果中包含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
于 2013-06-20T17:56:56.807 回答