2014-04-23 98 views
4

我有一個2字段的表,val1val2,包含相同的類型。 val1是強制性的,val2是可選的 - 但如果存在的話,應該計爲多達val1選擇不同的字段作爲一個字段(沒有CONCAT)

CREATE TABLE VALS (
id INT NOT NULL AUTO_INCREMENT, 
val1 INT NOT NULL, 
val2 INT DEFAULT NULL, 
timesign TIMESTAMP); 

對於這一點,我想要檢索的所有值,無論是從val1val2場來,進入一個領域res,使這一

INSERT INTO VALS (val1, val2) VALUES 
(1, null), 
(2, null), 
(3, 4), 
(5, null), 
(6, 7), 
(8, null); 

可以檢索到只有一個字段:

+------+ 
| res | 
+------+ 
| 1 | 
| 2 | 
| 3 | 
| 4 | 
| 5 | 
| 6 | 
| 7 | 
| 8 | 
+------+ 

如何做到這一點?

回答

4

試試這個:

SELECT val1 as res 
FROM VALS 

UNION 

SELECT val2 as res 
FROM VALS 
WHERE val2 is notNULL; 

你不需要 「DISTICT」,聯盟本身就給設置。與工會

SELECT a AS f FROM t 
UNION 
SELECT b AS f FROM t HAVING f IS NOT NULL ORDER BY f 

作品

+1

[**小提琴演示**](http://www.sqlfiddle.com/#!2/73103/ 1)爲你 –

+1

@MKhalidJunaid我很驚訝你做演示的速度有多快。魔術是什麼? - 謝謝! –

+0

當第一列'null'且第二列不是'null'時不起作用。如果你需要的話,你可能會看到我的解決方案(非常相似,但使用別名列) –

1

試試這個:

select resultcol from (select distict val1 as resultcol from vals union select distinct val2 as resultcol from vals)alias order by resultcol 

聯盟中刪除所有重複值

3

一個查詢時,兩個柱可以是NULL

+0

根據表definiton第一列被指定非空 –

+0

是的,你的建議是有幫助的否則我使用'不是';'兩個地方。 –

+0

@mhasan並不意味着它不會工作 –

相關問題