【问题标题】:How to combine data from two tables with no common fields in SQL?如何组合来自两个表中的数据,而 SQL 中没有公共字段?
【发布时间】:2019-07-06 17:36:18
【问题描述】:

我有两张桌子:一张有很多行,另一张有一张。这些表没有共同的字段。是否可以将它们组合成一个多行的表?

我检查了 UNION,but MSDN says:

以下是使用 UNION 组合两个查询的结果集的基本规则:

  • UNION 中的每个 SELECT 语句必须具有相同数量的列。
  • 列还必须具有相似的数据类型。
  • 每个 SELECT 语句中的列的顺序也必须相同。

示例

这就是我的桌子现在的样子:

      Table 1                            Table 2

Column1    Column2        Column4    Column5    Column3
-------    -------        -------    -------    -------
A          1                 E          10         a
B          2                                    
C          3                                    
D          4                                    

这就是我想要达到的结果:

            CONSOLIDATED_Table 3                   
Column1    Column2  Column3    Column4    Column5
-------    -------  -------    -------    -------
A          1         E          10         a
B          2         E          10         a
C          3         E          10         a
D          4         E          10         a

【问题讨论】:

    标签: mysql sql join union


    【解决方案1】:

    您可以像这样添加其他列:

    select tid, t_name, null as s_name
    from teachers t
    union all
    select sid, null, s_name
    from students s;
    

    【讨论】:

      【解决方案2】:

      是的,你绝对可以使用 INNER JOIN 。它是一种从多个表中获取数据的简单方法。您可以使用子查询并以行格式获取数据

      【讨论】:

      • 请给我一个子查询的例子。
      • 对于不清楚的问题,请不要猜测答案,请发表评论以寻求澄清。如果你没有声望,那就等着吧。
      【解决方案3】:

      我们使用连接来组合多个表的列,而我们使用联合来连接多个表的行,因为列类型和列的 nber 在所有使用联合的选择查询中都是相同的。 由于要显示所有行,我们可以使用 Union。 选择 tid 作为 id,t_name 作为老师的名字 联合所有 从students中选择sid为id,s_name为name;

      【讨论】:

      • 请不要猜测不清楚的问题的答案,评论要求澄清,否决和关闭投票/标记。如果你没有声望,那就等着吧。
      • 我很抱歉。从这里开始会照顾它。
      【解决方案4】:

      老师和学生

      select * from (
          select 'teacher' as rowtype, tid as id , t_name as name
          from teachers
          union all
          select 'student', sid, s_name
          from students) t
      order by name;
      

      【讨论】:

      • 请不要猜测不清楚的问题的答案,评论以要求澄清,否决和关闭投票/标记。
      【解决方案5】:

      这种方法产生一个笛卡尔积,但由于表 2 中只有 1 行,因此它应该适用于您的特定用例。

      select * from table_1, table_2;
      

      【讨论】:

        猜你喜欢
        • 2010-11-14
        • 2021-10-21
        • 1970-01-01
        • 1970-01-01
        • 2022-09-27
        • 1970-01-01
        • 2023-02-06
        • 1970-01-01
        • 2018-09-15
        相关资源
        最近更新 更多