MySQL多表LEFT JOIN查询结果异常的正确SQL写法
错误原因
- 关联逻辑缺失:你的
LEFT JOIN仅通过user_id字段做关联,没有加入incident_id匹配条件。对于user_id=640的记录,表2里有2条同user_id的数据,关联时表1的两条记录(incident_id=976、980)会同时匹配到表2user_id=640的两条结果,产生笛卡尔积冗余。 - 分组逻辑不规范:你使用
GROUP BY但没有对outcome字段做明确聚合,MySQL在非严格模式下会返回分组内第一条扫描到的outcome值,最终导致incident_id=980的记录错取到CR值。
正确查询语句
两张表是通过incident_id + user_id的联合字段做唯一匹配的,关联时需要同时指定两个字段的匹配规则,且当前场景下无需使用GROUP BY:
SELECT table1.incident_id, table1.user_id, table2.Outcome FROM table1 LEFT JOIN table2 ON table1.user_id = table2.user_id AND table1.incident_id = table2.incident_id;
注意:如果后续业务场景中关联后确实存在一对多需要分组聚合的情况,必须对非分组字段明确写聚合逻辑(比如
MAX(table2.Outcome)),不要依赖数据库默认的隐式取值规则,避免出现结果不符合预期的问题。
内容的提问来源于stack exchange,提问作者Milan Nagar
相关产品推荐
相关产品推荐

