表T3的A和B與來自T1的A和B相同。 基本上我需要做的是選擇所有不在T3上的值。 如果在T3上有一條與A,B相連的線我不想展示它。選擇某些值不在其他表中的行
SELECT T1.A, T1.B, T1.C
FROM T1, T2
WHERE T1.X=T2.X
AND NOT EXISTS
(
SELECT T3.A, T3.B
FROM T3
)
任何幫助? 感謝
表T3的A和B與來自T1的A和B相同。 基本上我需要做的是選擇所有不在T3上的值。 如果在T3上有一條與A,B相連的線我不想展示它。選擇某些值不在其他表中的行
SELECT T1.A, T1.B, T1.C
FROM T1, T2
WHERE T1.X=T2.X
AND NOT EXISTS
(
SELECT T3.A, T3.B
FROM T3
)
任何幫助? 感謝
SELECT T1.A, T1.B, T1.C
FROM T1 INNER JOIN T2 ON T1.X=T2.X
WHERE NOT EXISTS
(
SELECT 1 FROM T3
WHERE T3.A = T1.A AND T3.B = T1.B
)
select T1.A,T1.B,T1.C
from T1
inner join T2
on T1.X=T2.X
left join T3 on T1.A=T3.A and T1.B=T3.B
where T3.A is null
我不認爲Oracle會用這種方法來做有效的反連接,它會爲NOT EXISTS方法做。 –
你也可以做到這一點使用子查詢像
SELECT T1.A, T1.B, T1.C
FROM T1, T2
WHERE T1.X=T2.X
AND T1.A NOT IN (SELECT T3.A FROM T3)
AND T2.B Not IN (SELECT T3.B FROM T3)
SELECT T1.A, T1.B, T1.C
FROM T1, T2
WHERE T1.X=T2.X
AND (T1.A, T1.B) NOT IN (SELECT T3.A, T3.B FROM T3)
FYI:在'EXISTS'子查詢的慣例是選擇像'一些固定的標量值和NOT EXISTS(SELECT 1 FROM WHERE ...',因爲子查詢返回的記錄無關緊要,只是它是否返回記錄。我的理解是存在子查詢中的列將不會實際上b無論如何都要進行評估,所以從性能的角度來看,它並不重要。但是慣例通常是使用'SELECT 1'。 –
我不知道有一個特定的約定 - 我總是選擇NULL來表示對返回的任何內容缺乏興趣。 –