【问题标题】:Mysql one to none or many joinMysql 一对一或多连接
【发布时间】:2016-08-11 10:47:33
【问题描述】:

我知道有很多问题接近这个问题,但没有一个能解决我的问题。

假设我有 2 个表格,TableA 和 TableB

TableA 有:id 和 name

TableB 有:id、TableA_id 和 date

如果有的话,我想用 TableB 的最新记录获取 TableA LEFT JOIN。

SELECT `TableA`.`id` AS `TableA_ID`, `TableB`.`id` AS `TableB_ID` 
FROM `TableA` 
LEFT JOIN TableB` ON `TableA`.`id` = `TableB`.`id`

即使表 b 中没有可连接的内容,我也想要表 A 字段。 如果 TableB 有什么要加入的,那么我想要最新的。

我知道这可以通过子查询来实现,但我想知道是否有办法 LEFT JOIN。

【问题讨论】:

    标签: mysql join one-to-many right-to-left


    【解决方案1】:
    select a.id,b.id from tableA a left join tableB b on a.id = b.id 
    order by b.id desc
    

    【讨论】:

    • 这不会解决问题,因为我只希望 TableA 中的每个项目都有一行,并且 group by 不会完全解决它。
    • 在涉及日期的地方使用 Distinct 子句和 MAX() 子句。
    • 这可能是一个解决方案。
    【解决方案2】:

    我不确定 mysql 中的正确语法是什么,但在 mssql 中它看起来如下所示

    SELECT `TableA`.`id` AS `TableA_ID`, `new_table_b`.`id` AS `TableB_ID` 
    FROM `TableA` 
    LEFT JOIN (select id, max(date) from tableB group by id) new_table_b ON `TableA`.`id` = `new_table_b`.`id`
    

    【讨论】:

    • 如果可能的话,我想建立一个完整的连接,我可以从 TableB 中获取所有值。
    • 在你提到的问题中,在这种情况下,你想从 tableA 获取所有行,左连接将完成这项工作,如果你将使用完全连接,那么期望从 tableA 获取空行,因为可能存在将是 tableb 中与 tableA ids 不匹配的行
    猜你喜欢
    • 2013-05-16
    • 2016-09-20
    • 1970-01-01
    • 2022-06-15
    • 2015-07-12
    • 2020-05-25
    • 2011-11-02
    • 2012-12-20
    • 1970-01-01
    相关资源
    最近更新 更多