【问题标题】:Joining & Merging two tables into one将两个表连接并合并为一个
【发布时间】:2014-11-11 01:37:35
【问题描述】:

我有两张桌子,都共享几列。我想加入他们,并合并字段。

我想同时查询它们,并将它们合并为一行 - 使用基于 created 字段的最新数据

示例:

table1 [id, created, name, title, file, delete]
table2 [id, created, name, title, old, active]
# result
       [id, created, name, title, file, delete, old, active]

怎么办?

【问题讨论】:

  • 您尝试过任何查询吗?
  • 不,我不知道从哪里开始。
  • 如果表在“创建”上有关系,为什么不使用内连接?
  • @Tushar 关系?意义?内连接只会连接表,不会过滤掉不需要的字段。

标签: mysql join merge


【解决方案1】:

这是您要查找的查询(考虑到两个表之间的两个 id 相同):

SELECT T1.id
    ,T1.created
    ,T1.name
    ,T1.title
    ,T1.file
    ,T1.delete
    ,T2.old
    ,T2.active
FROM table1 T1
INNER JOIN (SELECT TL.id
                ,MAX(TL.created) AS created
            FROM table1 TL
            GROUP BY TL.id) T ON T.id = T1.id
                                 AND T.created = T1.created
INNER JOIN table2 T2 ON T2.id = T1.id
                       AND T2.created = T1.created

第一个INNER JOIN 用于仅保留每个id 的最新出现(使用GROUP BY 子句和MAX 函数)。

希望这会有所帮助。

【讨论】:

  • 第一次连接需要只保留最近出现的每个id(使用GROUP BY 子句和MAX 函数)。通过使用INNER JOIN,我确信我只保留所需的行,第二个关节为我提供了我正在寻找的附加信息(old 和active)
  • @yossi 查询是否返回您期望的结果?我添加了关于第一个 INNER JOIN 子句的简要说明,以使其更易于理解
【解决方案2】:
SELECT a.id, a.created, a.name, a.title, a.file, a.delete, b.old, b.active
FROM table1 a,
     table2 b
WHERE a.id = b.id

【讨论】:

  • 不要对关节使用这种老式语法,而是使用显式的JOIN 子句!而且您的查询没有提供预期的结果:基于created 字段的最新数据
猜你喜欢
  • 2011-02-21
  • 1970-01-01
  • 2014-04-01
  • 2021-11-14
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
  • 2010-11-16
  • 2021-04-04
相关资源
最近更新 更多