SQL – 左外连接不返回左表中的所有行

在进行多表联查时,我想让左表 table_ A 有数据但关联表 table_B 无相关数据的行也显示出来

刚开始我的写法如下:

SELECT
    s.id,
    s.stationId,
    s.stationName,
    s.stationType,
    h.Datetime,
    h.PRS,
    h.TEM,
    h.TEM_Max,
    h.TEM_Min,
    h.RHU,
    h.WIN_S_Max,
    h.WIN_S_Inst_Max,
    h.GST 
FROM
    base_data_station s
    LEFT JOIN surf_chn_mul_hor h 
        ON s.stationId = h.Station_Id_C
WHERE
        h.Datetime = '2020-04-16 16:00:00'
ORDER BY
    s.id

此时,按照普通人的想法会认为将能够实现要求(我当时就这样想的),但可惜的是它仅显示了A、B两表中均有的数据,随后我修改了查询条件

修改后的SQL:

SELECT
    s.id,
    s.stationId,
    s.stationName,
    s.stationType,
    h.Datetime,
    h.PRS,
    h.TEM,
    h.TEM_Max,
    h.TEM_Min,
    h.RHU,
    h.WIN_S_Max,
    h.WIN_S_Inst_Max,
    h.GST 
FROM
    base_data_station s
    LEFT JOIN surf_chn_mul_hor h 
            ON s.stationId = h.Station_Id_C 
        AND h.Datetime = '2020-04-16 16:00:00' 
ORDER BY
    s.id

此时,我期望的结果出现了

总结:在多表连接时我们可以理解为出现了一张拥有A、B两表数据的临时表,他们以“ON”所在的条件为纽带,数据 一 一 对应连接,如果条件出现在 where 中就相当于对这张临时表进行查询,所以仅能查询出A、B均有的数据

猜你喜欢

转载自www.cnblogs.com/yqk150/p/12714253.html