2013-04-29 103 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字段,它会非常简单 - 它只是在那一点上选择一列。