【问题标题】:How to join (without concatenating) two result sets of two fields together as one long ‘list’如何连接(不连接)两个字段的两个结果集作为一个长“列表”
【发布时间】:2013-04-29 00:12:20
【问题描述】:

执行以下操作需要什么 SQL 代码? :

我有一张桌子(让我们随意称桌子为“名称”):

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 查询会更简单吗?如果是这样,那会是什么样子。

【问题讨论】:

    标签: sql concatenation


    【解决方案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 字段,它会变得非常简单 - 它只是在此时选择一列。

    【讨论】:

      【解决方案2】:
      SELECT ID, Name1 as Names FROM person
      UNION
      SELECT ID, Name2 as Names FROM person
      

      ?

      。 . “不连接”是什么意思?

      【讨论】:

      • “连接”一词的意思是将两个字符串连接在一起;例如“A + B”=“AB”。我不想这样做。
      • 我认为UNION 可以,那么。但是您实际上是在执行两个单独的查询,然后加入它们。如果要重复,请使用UNION ALL
      • UNION 不起作用,因为它只保留相关记录。过去我曾尝试过 UNION ALL。但我需要弄清楚如何保留身份证。干杯。
      • 好的,我知道了。 SELECT ID,Name1 作为 Names FROM person UNION ALL SELECT ID,Name2 作为 Names FROM person 感谢您的帮助。
      • @DiegoNunes,我投票赞成你的答案,但那是在我看到你乞求投票之前。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 2012-01-13
      相关资源
      最近更新 更多