0

Oracle SQL クエリを作成しようとしていますが、正しい結果が得られません。

以下のテーブルでは、最初に DEVICE.MODEL='UNITA' である DEVICE からすべてのレコードを取得し、それらの結果について、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')

に一致する行がない場合は NULLLEFT JOINになります。一致する行がある場合、のテストによって含まれるものが決定されます。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 に答える