对基本的东西感到困惑 -
有人可以解释我 -
select s.name from students s
inner join friends f on f.id = s.id
inner join packages p on p.id = s.id
where p.salary < (select pp.salary from packages pp where pp.id = f.friend_id)
order by (select pp.salary from packages pp where pp.id = f.friend_id) ASC;
工资比较部分 - 即从包pp中选择pp.salary,其中pp.id = f.friend_id不应该产生相同的工资结果? - 那我们怎么比较呢。
对于参考,请使用以下示例表
表1-学生 列 - id,名称表2 - 朋友(此处每个id都与一个friend_id(他最好的朋友)相关联) 列 - id,friend_id
table3 - 包 列 - id,薪水
试图找出最好朋友的工资超过他工资的朋友的名字。
我很难理解这个解决方案。
答案 0 :(得分:1)
where
子查询部分是错误的,因为子查询将返回多个记录,并且不能与<
运算符一起使用,因为它接受标量值。而是将其更改为JOIN
以及
JOIN packages pp ON pp.id = f.friend_id
AND p.salary < pp.salary
将您的查询更改为
select s.name from students s
inner join friends f on f.id = s.id
inner join packages p on p.id = s.id
JOIN packages pp ON pp.id = f.friend_id
AND p.salary < pp.salary
order by pp.salary;