SQL - 不同条件的内部联接

时间:2017-01-12 07:15:03

标签: mysql sql database join

对基本的东西感到困惑 -

有人可以解释我 -

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,薪水

试图找出最好朋友的工资超过他工资的朋友的名字。

我很难理解这个解决方案。

1 个答案:

答案 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;