代码之家  ›  专栏  ›  技术社区  ›  Muhammad Raihan Muhaimin

使用mysql从不同表行合并两列

  •  0
  • Muhammad Raihan Muhaimin  · 技术社区  · 7 年前

    学生

     --------------
    | Name | Grade |
     --------------
     --------------
    | John |  A+   |
     --------------
    | Tina |  B    |
     --------------
    

    以及 类型

    
     --------------
    | Type | Class |
     --------------
     --------------
    | Good |  12   |
     --------------
    | Avg  |  11   |
     --------------
    

    现在我想通过将它们按行合并得到结果,这样SQL查询的结果将是,

     -----------------------------
    | Name | Grade | Type | Class |
     -----------------------------
    | John |  A+   | Good |  12   |
     -----------------------------
    | Tine |  B    | Avg  |  11   |
     -----------------------------
    
    0 回复  |  直到 7 年前
        1
  •  2
  •   Nick SamSmith1986    7 年前

    假设每个表中的列数相同,则可以按行号链接它们。没有一个 ORDER BY 子句,但行编号是不确定的,不能保证结果。

    在MySQL 5.7及以下版本中:

    SELECT Name, Grade, Type, Class
    FROM (SELECT *, @rownum := @rownum + 1 AS rownum
          FROM Student
          CROSS JOIN (SELECT @rownum := 0) r
          ) s
    JOIN (SELECT *, @rownum2 := @rownum2 + 1 AS rownum
          FROM Type
          CROSS JOIN (SELECT @rownum2 := 0) r
          ) t ON t.rownum = s.rownum
    

    在MySQL8.0及以上版本中:

    SELECT Name, Grade, Type, Class
    FROM (SELECT *, ROW_NUMBER() OVER () AS rownum
          FROM Student) s
    JOIN (SELECT *, ROW_NUMBER() OVER () rownum
          FROM Type) t ON t.rownum = s.rownum
    

    输出:

    Name    Grade   Type    Class
    John    A+      Good    12
    Tina    B       Avg     11
    

    Demo on dbfiddle