2013-06-19 116 views
0

現狀:選擇匹配的記錄,如果表2有記錄,否則從表中選擇所有1

  • 我有兩個表
  • 表1總是有記錄
  • 表2是SELECT語句的結果,並可能會或可能不會有記錄

期望的結果:

如果表2有任何記錄,我只想要匹配從表1,否則記錄,我想從表1

所有記錄我知道我能做到這一點:

DECLARE @count int 
SELECT @count=COUNT(*) FROM Table2 

IF @count>0 
SELECT t1.* FROM Table1 t1 INNER JOIN Table2 t2 ON t1.id=t2.id 
ELSE 
SELECT * FROM Table1 

然而,如果可能,我試圖避免IF陳述。

這可能嗎?

+0

你爲什麼試圖避免IF語句? – PowerUser

+0

我試圖充分利用SQL,並減少我必須維護的代碼。通過IF,我可能不得不在未來調整兩個選擇語句。對我而言,如果我找不到更好的方法去做,IF就是安全網。 – davids

回答

2
select t1.* 
from Table1 t1 
left join 
     Table2 t2 
on  t1.id = t2.id 
where t2.id is not null -- Match found 
     or not exists -- Or Table2 is empty 
     (
     select * 
     from Table2 
     ) 
+0

謝謝。我認爲這一定是可能的 – davids

相關問題