You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL三表查询无法获取不匹配行:venueId=88的rd表数据缺失一行

解决MySQL多表查询丢失不匹配行的问题

你遇到的核心问题是连接类型用错了——内连接(INNER JOIN)只会返回所有关联表都有匹配数据的行,而你需要保留rd表中所有venueId=88的记录,哪怕对应的booking或shift表没有匹配项。

问题根源

你当前的查询应该是用了INNER JOIN关联booking(也就是你语句里的a表)和shift表,这就导致rd表中那一条找不到对应booking/shift记录的数据被过滤掉了,最终只返回2行。

解决方案:改用左连接(LEFT JOIN)

把rd表作为主表,用LEFT JOIN关联其他表,这样不管其他表有没有匹配数据,rd的所有行都会被保留,没有匹配的字段会自动填充为null,正好符合你期望的输出格式。

参考修改后的查询语句(根据你的需求调整了字段别名和关联逻辑,你需要根据实际表结构微调关联键):

SELECT 
  a.booking_id AS bookingId,
  a.booking_meeting_room_id AS bookingMeetingRoomId,
  a.booking_venue_id AS bookingVenueId,
  rd.venue_id AS venueId,
  rd.rd_id AS rdId,
  rd.morningTotalGuest,
  shift.shift_id AS shiftId
FROM rd
-- 左连接booking表,保留rd的所有行
LEFT JOIN booking a 
  ON a.booking_venue_id = rd.venue_id
-- 左连接shift表,同样保留rd的所有行(关联键根据实际表结构调整)
LEFT JOIN shift 
  ON shift.rd_id = rd.rd_id
WHERE rd.venue_id = 88;

关键注意点

  1. 关联条件放对位置:如果你的原查询里有针对booking或shift的过滤条件(比如时间范围),一定要把这些条件放到LEFT JOIN的ON子句里,而不是WHERE子句。否则会把左连接的null结果过滤掉,变回内连接的效果。
  2. 确认关联键正确性:要保证booking和rd、shift和rd的关联字段是正确的(比如我假设shift和rd通过rd_id关联,你需要根据实际表结构修改)。

这样调整后,rd表中3条venueId=88的记录都会被返回,没有匹配的booking/shift字段就会显示为null,和你期望的输出一致。

内容的提问来源于stack exchange,提问作者rh2018

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:26:09