SQL中如何基于相同ID关联列?关联查询结果异常求修正
问题解决:关联Person和Points表获取正确结果
问题原因
你当前的查询用逗号连接两个表,会生成笛卡尔积(两个表的所有行两两匹配),再通过CASE仅在Person.id = Points.id时返回name。这种方式会产生大量冗余行,且你未指定id所属的表,数据库解析时的默认匹配逻辑导致大部分行的CASE条件不成立,最终只有少数行能正确显示name。
正确的查询语句
推荐使用标准的INNER JOIN语法基于id关联两个表,这是最清晰且高效的方式:
方式1:INNER JOIN(推荐)
SELECT p.id, pr.name, p.points FROM Points p INNER JOIN Person pr ON p.id = pr.id;
这里给表起了别名p(Points)和pr(Person),让语句更简洁易读。
方式2:WHERE子句关联(旧写法)
如果你习惯旧的语法,也可以通过WHERE指定关联条件:
SELECT Person.id, Person.name, Points.points FROM Person, Points WHERE Person.id = Points.id;
验证结果
执行上述任一语句后,都会得到你预期的结果:
id name points ----------------- 1 Jason 8 2 Dave 9 3 Amy 5 ...
内容的提问来源于stack exchange,提问作者Cookfishbro
相关产品推荐
相关产品推荐

