如何将两个字段的两个结果集连接(不连接)作为一个长'列表'

时间:2013-04-29 00:12:21

标签: sql concatenation

执行以下操作需要哪些SQL代码? :

我有一个表(让我们随意调用表'Names'):

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

我想要生成的是Name1和Name2的单个列表(我甚至不关心分组或排序),但我想保留原始的“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 个答案:

答案 0 :(得分: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字段,它会变得如此简单 - 它只是在那时选择一列。

答案 1 :(得分:-2)

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

。 。你的意思是“没有连接”?