SQL如何基于表最大值进行Join关联 多表查询结果不符合预期
问题解答
现有SQL的错误点
- 核心逻辑错误:子查询
select max(A.Val) from A as a where a.Val = A.val的过滤条件错误,你用子查询的a表Val和外层A表当前行的Val做等值匹配,导致每次子查询返回的最大值就是当前行的Val,等于没有做最大值过滤,所有和B表关联上的A行都会被保留,所以返回了3条结果。 - 字段名拼写错误2处:
- where条件里的
C.Lable拼写错误,正确字段名为C.Label - 查询返回的
A.txt不存在,表A的对应字段名为text
- where条件里的
修正后的实现方案
方案1:先求符合条件的最大Val再关联(兼容性最高)
select C.Label, A.text from C join B on B.Label = C.Label join A on A.Val = B.Val where C.Label = 'Adria' and A.Val = (select max(A.Val) from A join B on A.Val = B.Val where B.Label = 'Adria')
方案2:排序取Top1(适合单条最大结果的场景,写法更简洁)
select C.Label, A.text from C join B on B.Label = C.Label join A on A.Val = B.Val where C.Label = 'Adria' order by A.Val desc limit 1
两种方案都可以输出你预期的Adria bars结果。
内容的提问来源于stack exchange,提问作者KnowNothing
相关产品推荐
相关产品推荐

