2013-04-29 187 views
0

執行以下操作需要什麼SQL代碼? :如何將兩個字段的兩個結果集連接(不連接)爲一個長列表

我有一個表(讓任意調用表「名稱」):

ID | Name1 | Name2 
---+--------+------- 
1 | Fred | Jack 
2 | Jack | Jim 
3 | Jill | Fred 
4 | Jim | Jack 

我想是產生是NAME 1和NAME(我的一個列表甚至不關心分組或排序)作爲這樣的,但我想保持原來的「ID」協會名稱爲:

ID | Names 
---+------ 
1 | Fred 
1 | Jack 
2 | Jill 
2 | Jim 
3 | Jack 
3 | Jim 
4 | Fred 
4 | Jack 

爲什麼我要這麼做?因爲它看起來很容易,而且作爲一個SQL編碼器,我應該可以執行這個任務,但是我找不到能夠創建此輸出的解決方案。更進一步,我只設法找到想要連接字段的人,這是一個簡單的任務,但我對連接不感興趣。

附加問題:如果Name1字段與Name2不在同一個表中,SQL查詢是否會有很大差異? (如果它不同,它會是什麼樣子?)

附加問題:如果我們不關心ID字段,SQL查詢會更簡單嗎?如果是這樣,那將是什麼樣子。

回答

-2
SELECT ID, Name1 as Names FROM person 
UNION 
SELECT ID, Name2 as Names FROM person 

。 。你的意思是「沒有連接」?

+0

「拼接」一詞是指將兩個字符串連接在一起;例如'A + B'='AB'。我不想這樣做。 – Drooten 2013-04-29 00:18:43

+1

那麼我認爲'UNION'會做。但是你實際上正在做兩個分離的查詢,然後加入它們。如果你想要重複的話,可以使用'UNION ALL'。 – 2013-04-29 00:19:25

+0

UNION不起作用,因爲它只保留相關記錄。在過去,我嘗試過UNION ALL。但我需要弄清楚如何保持身份證。乾杯。 – Drooten 2013-04-29 00:22:37

1

你可以使用這個表單來包含id,並給你一個特定的ID排序。

SELECT n.id, n.name1 FROM names n 
UNION 
SELECT m.id, m.name2 from names m 
ORDER BY id ASC; 

如果它是在一個不同的表,使用UNION的沒有改變,因爲我們從錶帶來的結果結合起來,並通過ID進行排序。但這並不意味着數據是相關的。

SELECT n.id, n.name FROM name_one n 
UNION 
SELECT m.id, m.name from name_two m 
ORDER BY id ASC; 

如果我們不關心ID字段,它會非常簡單 - 它只是在那一點上選擇一列。