2013-07-19 77 views
0

表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 
) 

任何幫助? 感謝

+3

FYI:在'EXISTS'子查詢的慣例是選擇像'一些固定的標量值和NOT EXISTS(SELECT 1 FROM WHERE ...',因爲子查詢返回的記錄無關緊要,只是它是否返回記錄。我的理解是存在子查詢中的列將不會實際上b無論如何都要進行評估,所以從性能的角度來看,它並不重要。但是慣例通常是使用'SELECT 1'。 –

+0

我不知道有一個特定的約定 - 我總是選擇NULL來表示對返回的任何內容缺乏興趣。 –

回答

4
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 
) 
3
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 
+0

我不認爲Oracle會用這種方法來做有效的反連接,它會爲NOT EXISTS方法做。 –

0

你也可以做到這一點使用子查詢像

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) 
0
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) 
相關問題