【问题标题】:How to merge rows of two tables when there is no relation between the tables in sqlsql中表之间没有关系时如何合并两个表的行
【发布时间】:2013-09-01 11:51:37
【问题描述】:

假设我们在每个表A 和表B 中有十行 表A单

ColA 
  1 
  2 
  3 
  4 
  5 
  6 
  7 
  8 
  9 
 10

和表B 与列

ColB 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20

需要输出:

SingleColumn
   1 
  11 
   2 
  12 
   3 
  13 
   4 
  14 
   5 
  15 
   6 
  16 
   7 
  17 
   8 
  18 
   9 
  19 
  10 
  20

P.S : 这两个表之间没有关系。两列都是独立的。还有 1, 2...19, 20 ,它们是ids 行,如果考虑数据,则只有无序形式。

【问题讨论】:

  • 您使用的是什么 RDBMS(MySql、Oracle、SQL Server...)?
  • 排序在输出中重要吗?
  • 排序并不重要,但应按上述方式选择行

标签: mysql sql sql-server oracle


【解决方案1】:
SELECT col FROM (
  select colA as col
        ,row_number() over (order by colA) as order1
        ,1 as order2
  from tableA
  union all
  select colB
        ,row_number() over (order by colB)
        ,2
  from tableB
) order by order1, order2

【讨论】:

    【解决方案2】:

    已更新在 SQL Server 和 Oracle 中,您可以这样做

    SELECT col
      FROM
    (
      SELECT a.*
        FROM
      ( 
        SELECT cola col, 1 source, ROW_NUMBER() OVER (ORDER BY cola) rnum
          FROM tablea
      ) a 
      UNION ALL 
      SELECT b.*
        FROM
      (
        SELECT colb col, 2 source, ROW_NUMBER() OVER (ORDER BY colb) rnum
          FROM tableb
      ) b
    ) c
     ORDER BY rnum, source 
    

    输出:

    |色彩 | |-----| | 1 | | 11 | | 2 | | 12 | | 3 | | 13 | | 4 | | 14 | | 5 | | 15 | | 6 | | 16 | | 7 | | 17 | | 8 | | 18 | | 9 | | 19 | | 10 | | 20 |

    这里是 SQLFiddle 演示(SQL Server)
    这是SQLFiddle演示(Oracle)

    在MySql中你可以这样做

    SELECT col
      FROM
    ( 
      (
        SELECT cola col, 1 source, @n := @n + 1 rnum
          FROM tablea CROSS JOIN (SELECT @n := 0) i
         ORDER BY cola
       )
      UNION ALL
      (
        SELECT colb col, 2 source, @m := @m + 1 rnum
          FROM tableb CROSS JOIN (SELECT @m := 0) i
         ORDER BY colb
       )
    ) c
     ORDER BY rnum, source
    

    这里是SQLFiddle演示

    【讨论】:

    • 输出中只需要一列
    • @user2728110 你的意思是连接可乐 + ' ' + colb?你的问题不清楚。你能编辑它并准确地展示你的期望吗?
    【解决方案3】:
    select colA from tableA 
    union 
    select colB from tableB;
    

    【讨论】:

    • 这实际上并没有按要求工作。这只会给你一列,但用户要求两列。
    • 在 UNION 中不遵循模式。输出具有一个表中的所有行,而不是选择另一个表。在上述情况下不需要。检查写入的输出
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多