2011-01-25 73 views
2

我在想我們可以在下面做這個查詢嗎?在選擇查詢中包含一個字符串

SELECT America, England, DISTINCT (country) FROM tb_country 

這將(我的意思是)顯示:

America 
England 
(List of distinct country field in tb_country) 

所以關鍵是要顯示(例如)美國和英國即使DISTINCT國家領域沒有返回。基本上我需要這個查詢來列出一個選擇下拉列表,並給出一些用戶可以選擇的粘性值,同時允許他們自己根據需要添加一個新的國家。

不言而喻,如果tb_country中的一行具有美國或英國的值,它們將不會在查詢結果中顯示爲重複。因此,如果tb_country有值的列表:

Germany 
England 
Holland 

查詢將只輸出:

America 
England 
Germany 
Holland 

回答

7

你需要使用UNION:

SELECT 'America' AS country 
UNION 
SELECT 'England' AS country 
UNION 
SELECT DISTINCT(c.country) AS country 
    FROM TB_COUNTRY c 

聯盟將刪除重複; UNION ALL不會(但速度更快)。

數據類型必須匹配SELECT子句中的每個序數位置。意思是,如果第一個查詢中的第一列是INT,那麼之後所有聯合語句的第一列也必須是INT,或者NULL

+0

還有其他方法嗎?如果我必須以這種方式列出10-20個粘性值,查詢將會很長。如果沒有別的辦法,我會用你的建議。謝謝 – Henson 2011-01-25 06:53:34

0

爲什麼你不tb_country添加一個權重列,並使用一個命令子句:

執行一次:

update country set weight = 1 where country = 'England'; 
update country set weight = 1 where country = 'America'; 

然後使用它:

select distinct(country) from tb_country order by desc weight ; 

另一種方法是使用一個額外的國家表與兩列(國家,重量)和一個外部聯接。

Personnaly我更喜歡一個國家表,國家字段有一個唯一的約束和 使用一個外鍵。

相關問題