說我有一個簡單的表Foo的列Customer_ID和App_ID
我想選擇所有的客戶CUSTOMER表誰同時擁有App 1并App 2在Foo表中。
我可以
SELECT C FROM CUSTOMER C
INNER JOIN FOO F ON
F.CUSTOMER_ID = C.ID
INNER JOIN APP A ON
A.ID = F.APP_ID
WHERE A.NAME = 'App 1`
但這僅在客戶擁有 1 個應用程式時才給我結果,只有當兩個應用程式都在Foo.
uj5u.com熱心網友回復:
我會使用存在邏輯來表達這一點:
SELECT C.*
FROM CUSTOMER C
INNER JOIN FOO F
ON F.CUSTOMER_ID = C.ID
WHERE
EXISTS (SELECT 1 FROM APP A WHERE A.ID = F.APP_ID AND A.NAME = 'App 1') AND
EXISTS (SELECT 1 FROM APP A WHERE A.ID = F.APP_ID AND A.NAME = 'App 2');
如果您想通過加入來實作這一點,那么您需要對表進行兩次連接APP,例如
SELECT DISTINCT C.*
FROM CUSTOMER C
INNER JOIN FOO F
ON F.CUSTOMER_ID = C.ID
INNER JOIN APP A1
ON A1.ID = F.APP_ID
INNER JOIN APP A2
ON A2.ID = F.APP_ID
WHERE
A1.NAME = 'App 1' AND
A2.NAME = 'App 2';
請注意,我在上面使用了不同的選擇,因為加入APP兩次可能會生成重復的記錄。洗掉可能的重復項代表了連接方法中的一個額外步驟,這在使用exists 時不會發生。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/349050.html
