mysql left join 左连接查询关联n多张表

来源:互联网 发布:papago翻译软件 编辑:程序博客网 时间:2024/05/22 03:43

最近用mysql 多表关联查询比较多,特此总结一下left join用法,拓展下left join将多表关联。

left join 左连接即以左表为基准,显示坐标所有的行,右表与左表关联的数据会显示,不关联的则不显示。关键字为left join on。
**基本用法如下:
select table a left join table b on a.id = b.ta_id**

注意:1⃣️其中on后面关联的字段应该是同一字段(两表关联的外键)
2⃣️由于以左表为基准,左表一条记录如果对应右表多条记录,那查出的数据中右表的数据也只显示一条,如果要都显示,可以用group_contact()将字段用逗号隔开显示在一条记录上。所以右表不管有几张,如果和左表都是一对一关系,则没问题,存在一对多关系时,需要一定的处理。


三表关联 则如下:
select table a left join table b(left join table c on b.id = c.tb_id) on a.id = b_ta.id


再拓展一下,如果关联七八张表,就像下面这条sql,用法其实无非就像三表关联一样,一层套一层,只不过关系要理顺好。

SELECT    GROUP_CONCAT(u.stuffName),    GROUP_CONCAT(ee.id),    ee.applyTime,    p.orderState,    GROUP_CONCAT(        concat(            s.departureAirportCode,            '-',            s.landingAirportCode        )    ),    p.pnr,    sns.c,    sns.b,    sns.a,    ee.pnr newp,    GROUP_CONCAT(        CONCAT(            s.departureDate,            ' ',            s.departureTime        )    ),    GROUP_CONCAT(s.flightNum),    GROUP_CONCAT(s.seatClass),    c.rebookintSumFee,    c.customerRebookintFee,    c.amountReceivable,    o.orderNum,    comp.companycode,    comp.companyNameFROM    endrose eeLEFT JOIN passenger p ON ee.passengerId = p.idLEFT JOIN segment s ON s.endroseId = ee.idLEFT JOIN costfee c ON c.endroseId = ee.idLEFT JOIN(    SELECT        ns.passengerId,        GROUP_CONCAT(ns.flightNum)b,        GROUP_CONCAT(ns.seatClass)a,        GROUP_CONCAT(            CONCAT(                ns.departureDate,                ' ',                ns.landingDate            )        )c    FROM        segment ns    WHERE        ns.orderState = 0    GROUP BY        ns.passengerId)sns ON sns.passengerId = ee.passengerIdLEFT JOIN(    passenger passe    LEFT JOIN airticketorder o ON passe.orderId = o.id)ON passe.id = ee.passengerIdLEFT JOIN(    passenger pass    LEFT JOIN `user` u ON pass.stuffUUID = u.id)ON pass.id = ee.passengerId LEFT JOIN(    passenger passen LEFT JOIN(        airticketorder ao left join(            `user` ua left join                 company comp on comp.id = ua.companyId            )ON ao.bookerstuffId = ua.id        ) ON passen.orderId = ao.id) ON passen.id = ee.passengerIdgroup by ee.applyTime

这条sql中尤其是最后一个left join,关联了好几张表,要好好理顺才行。
写的时候从外层往里写,一层一层left join,才不容易出错。

1 0