2011-06-24 35 views
11

基本上,什麼syntex將允許我實現標題語句?SQL如果select語句不返回任何行,則執行替代選擇語句

If (select statement 1) returns 0 rows THEN (select statement 2) else (select statement 3) 

這樣無論從語句2或3 的sql返回結果我找了一個辦法做到這一點,但沒有我發現看似很遠,如果要求準確地解決。

+1

奇怪的目標。它的物理意義是什麼? – heximal

+0

哪個RDBMS?你想要在純SQL中做到這一點,或作爲腳本的一部分? – davek

+0

你的意思是「如果第一次選擇沒有行,使用第二次選擇」,而不是使用3個表格?並且所有結果集都具有相同的形狀(因爲契約隨後發生更改,所以不會動態更改結果集。) – gbn

回答

17
IF EXISTS (SELECT field FROM table) 
BEGIN 
SELECT field FROM table2 
END 
ELSE 
BEGIN 
SELECT field FROM table3 
END 
0

在這裏你去...

IF ((select count(*) from table1)= 0) 
BEGIN 
Select * from table2 
END 
ELSE 
BEGIN 
SELECT * from table3 
END 
+2

大多數優化器都足夠智能,只要發生一個匹配行,就可以完成對「EXISTS」條件的評估。有些優化器太愚蠢了,無法意識到您計劃將COUNT(*)與0進行比較,並將評估所有行以計算計數。 –

+0

同意...如果0是我們想要比較的所有; EXISTS是有道理的!其他情況下可能會有幫助。 – Gans

1

對不起,缺乏反饋。辦公室裏的其他人對此感興趣,想出了這個:

select * from (
     select * 
       , (SELECT Count(*) 
        FROM users 
        WHERE version_replace = 59 AND moderated = 1) AS Counter 
      FROM users WHERE version_replace = 59 AND moderated in (0,1) 
    ) AS y 
where Counter = 0 and Moderated = 0 
    or Counter > 0 and Moderated = 1 
ORDER By ID DESC 

這就是我所需要的。

+0

似乎有點複雜,但它符合要求... – ChrisBint