在进行多表联查时,我想让左表 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均有的数据