2011-07-18 23 views
1

我想創建一個MyQSL查詢類似追加到MySQL的結果,如果在不爲1列的結果

SELECT person, city FROM mytable 
UNION 
SELECT 'BOB', 'Chicago' IF 'BOB' NOT IN (SELECT person FROM mytable); 

如果「BOB」在結果未返回,我想給他追加到結果並列舉他在芝加哥。如果BOB確實回來了,不管他的位置是什麼,我都不想把他追加到芝加哥。

如果我完全匹配列,我可以做這項工作,但如果他被列爲除芝加哥以外的其他地方,我最終會得到多個BOB結果。

SELECT person, city FROM mytable 
UNION 
SELECT 'BOB', 'Chicago' 

但我不想匹配的位置。只是這個人的名字。

回答

1

這應該工作:

SELECT person, city FROM mytable 
UNION 
SELECT 'BOB', 'Chicago' from dual 
where NOT exists (SELECT person FROM mytable WHERE person = 'BOB'); 

更優化的版本,返回相同的結果

SELECT person, city FROM mytable WHERE person <> 'BOB' 
UNION 
SELECT 'BOB', COALESCE((select city from mytable WHERE person = 'BOB'), 'Chicago') from dual 
+0

謝謝那有效......但什麼是「雙重」? – Chris

+1

'dual'對於那些喜歡總是指定表名的人來說,當沒有具體的表來從中獲取數據時,'dual'是一種方便。在mySql和MSSQL中它不是必需的,因爲它在Oracle中。但是,如果您需要指定WHERE,它仍然是必需的。例如:'select 1'與'select 1 from dual'相同,但'select'ok'where 0 = 0'不起作用,您需要'dual'在這裏,'select'ok'from dual',其中0 = 0 ' –

0

這是你的原始查詢的重寫,應該工作:

SELECT person, city FROM mytable 
UNION 
SELECT 'BOB', 'Chicago' from dual where not exists (
    SELECT NULL FROM mytable where person = 'BOB' 
);