【问题标题】:merge two tables with different columns mysql合并具有不同列mysql的两个表
【发布时间】:2016-02-09 12:47:55
【问题描述】:

我想合并两个不同列的表mysql。 例如

表 1:

-------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt
-------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp
 2    sometitle someslg  1     43566    timestamp   timestamp

表 2:

-------------------------------------------------------------
id    ptitle   slug     pviews   updatedAt   createdAt
-------------------------------------------------------------
 1  sometitle  someslg  3434    timestamp   timestamp
 2  sometitle  someslg  6454    timestamp   timestamp
 3  sometitle  someslg  5454    timestamp   timestamp

以上表格为示例。 我已与 UNION 合并。这是我的查询

SELECT * ((SELECT t1.item_id,t1.title,t1.slug,t1.type,t1.views,t1.updatedAt,t1.createdAt 
FROM table1
t1) UNION ALL (SELECT t2.id,t2.ptitle,t2.slug,'',t2.pviews,t2.updatedAt,t2.createdAt)) t3 
ORDER BY t3.item_id ASC

这很好,执行查询后,我会得到类似的结果

-------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt
-------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp
 1    sometitle someslg        3434     timestamp   timestamp
 2    sometitle someslg  1     43566    timestamp   timestamp
 2    sometitle someslg        6454     timestamp   timestamp
 3    sometitle someslg        5454     timestamp   timestamp

但我希望结果中有一个虚拟列,显示来自哪个表的行,如下所示

--------------------------------------------------------------------------
item_id   title   slug   type   views   updatedAt   createdAt   from_tbl
--------------------------------------------------------------------------
 1    sometitle someslg  1     43454    timestamp   timestamp   t1
 1    sometitle someslg        3434     timestamp   timestamp   t2
 2    sometitle someslg  1     43566    timestamp   timestamp   t1
 2    sometitle someslg        6454     timestamp   timestamp   t2
 3    sometitle someslg        5454     timestamp   timestamp   t2

【问题讨论】:

  • MySQL 还是 MS SQL Server?不要标记未涉及的产品...

标签: mysql sql


【解决方案1】:

只需将列添加到:

SELECT t3.*
FROM ((SELECT t1.item_id, t1.title, t1.slug, t1.type, t1.views, t1.updatedAt, t1.createdAt, 't1' as from_tbl
       FROM table1 t1
      ) UNION ALL
      (SELECT t2.id, t2.ptitle, t2.slug, '', t2.pviews, t2.updatedAt, t2.createdAt, 't2'
      )
     ) t3
ORDER BY t3.item_id ASC

【讨论】:

  • 我想要结果中的“1”而不是“t1”和“2”而不是“t2”。显示我可以定义这个。
  • 在查询中使用'1' 而不是't1'
【解决方案2】:

试试这个方法

SELECT t3.*
FROM ((SELECT t1.item_id, t1.title, t1.slug, t1.type, t1.views, t1.updatedAt, t1.createdAt, '1' as from_tbl
       FROM table1 t1
      ) UNION ALL
      (SELECT t2.id, t2.ptitle, t2.slug, '', t2.pviews, t2.updatedAt, t2.createdAt, '2'  FROM table2 t2
      )
     ) t3
ORDER BY t3.item_id ASC

【讨论】:

    【解决方案3】:

    创建表 table3 AS ( 选择 t1.*,t2.* 从表 1 作为 t1,从表 2 作为 t2 在哪里 t1.LinkID1 = t2.LinkID2 ); 插入表 3

    ** LinkID1 和 LinkID2 都是索引引用

    【讨论】:

      猜你喜欢
      • 2014-07-15
      • 1970-01-01
      • 2018-03-18
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多