2017-06-21 84 views
0

我有一個典型的SQL語句與INNER JOINSQL - 不返回行,如果JOIN的工作

SELECT * from t1 
INNER JOIN t2 ON t2.a = t1.a 

我的要求是,該結果集應該是空的,如果連接返回至少1排。如果連接返回0行,那麼我希望看到結果。

首先,我想用NOT EXISTS(或LEFT JOIN + IS NULL)的,但是這並不在我的情況下工作,因爲這個如果沒有在其他表,是不是我需要找到我會返回結果。如果在另一個表中有匹配,並且我想返回某些內容(如果其他表中沒有匹配),則我不返回任何內容。

+3

如果連接返回0行,那麼你想顯示哪個結果?不是我的失望,但你的問題沒有多大意義。 –

+0

你的意思是「左外連接」? – Jens

+0

你的問題有點矛盾,但我想你只是想在結果返回0行時做些什麼? 1.聲明變量(例如joinRowCount) 2.將選擇內部變量 3.計數如果變量= 0 - >做的東西做 - >不這樣做的東西 這是什麼你要? –

回答

0

你可以只使用一個CASE和EXISTS聲明:

SELECT CASE WHEN EXISTS (SELECT * FROM t1 INNER JOIN t2 ON t2.a = t1.a) 
     THEN 0 
     ELSE 1 
     END 
-1

據我瞭解的問題(正確的,如果我錯了),你加入不返回時需要的所有「一」表t1的列當聯接返回至少1行時,行和空值。

低於Oracle查詢將導致:

1)空,如果一起返回ATLEAST一行

2)表T1的「A」欄串接值,如果加入不返回行 注:代替可以根據版本使用wm_concat,listagg。

選擇 (情況 當join_count> 0,則空

否則(選擇TO_CHAR(wm_concat(a))的時刻t1)

端) 「結果」

從 (選擇count(col1)as'join_count'from(選擇t1.a as'col1'from t1 join t2 on t1.a = t2.a));

-1

你需要這樣做:

選擇T1 LEFT JOIN * T2 ON t2.a = t1.a其中t2.a爲空

希望這有助於你

+0

選擇1爲a,2爲b 到#temp1中 插入到#temp1中 選擇2爲a,3爲b 選擇3爲a,2爲b 到#TEMP2 插入到#TEMP2 選擇4爲a,3爲b SELECT * FROM#temp1中T1, #TEMP2 T2 其中0 = (從#temp1中T1 SELECT COUNT(*) INNER JOIN#TEMP2 T2 ON t2.a = t1.a) –