基本上,什麼syntex將允許我實現標題語句?SQL如果select語句不返回任何行,則執行替代選擇語句
If (select statement 1) returns 0 rows THEN (select statement 2) else (select statement 3)
這樣無論從語句2或3 的sql返回結果我找了一個辦法做到這一點,但沒有我發現看似很遠,如果要求準確地解決。
基本上,什麼syntex將允許我實現標題語句?SQL如果select語句不返回任何行,則執行替代選擇語句
If (select statement 1) returns 0 rows THEN (select statement 2) else (select statement 3)
這樣無論從語句2或3 的sql返回結果我找了一個辦法做到這一點,但沒有我發現看似很遠,如果要求準確地解決。
IF EXISTS (SELECT field FROM table)
BEGIN
SELECT field FROM table2
END
ELSE
BEGIN
SELECT field FROM table3
END
在這裏你去...
IF ((select count(*) from table1)= 0)
BEGIN
Select * from table2
END
ELSE
BEGIN
SELECT * from table3
END
大多數優化器都足夠智能,只要發生一個匹配行,就可以完成對「EXISTS」條件的評估。有些優化器太愚蠢了,無法意識到您計劃將COUNT(*)與0進行比較,並將評估所有行以計算計數。 –
同意...如果0是我們想要比較的所有; EXISTS是有道理的!其他情況下可能會有幫助。 – Gans
對不起,缺乏反饋。辦公室裏的其他人對此感興趣,想出了這個:
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
這就是我所需要的。
似乎有點複雜,但它符合要求... – ChrisBint
奇怪的目標。它的物理意義是什麼? – heximal
哪個RDBMS?你想要在純SQL中做到這一點,或作爲腳本的一部分? – davek
你的意思是「如果第一次選擇沒有行,使用第二次選擇」,而不是使用3個表格?並且所有結果集都具有相同的形狀(因爲契約隨後發生更改,所以不會動態更改結果集。) – gbn