2017-01-12 2 views
0

Просто путается на основных вещах -SQL - внутреннее соединение по различным критериям

может кто-нибудь объяснить мне это - сравнение

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.salary из пакетов рр где рр. id = f.friend_id не должен давать одинаковый результат зарплаты? - так как мы можем сравнивать.

для ссылок, используйте приведенные ниже таблицы образцов

таблицы 1 студент столбцов - идентификатор, имя

таблица 2 - друзья (здесь каждый идентификатор связан с одним friend_id (его лучший друг)) столбцы - идентификатор, friend_id

Table3 - пакеты столбцы - идентификатор, зарплатные

Пытаясь узнать имя друга, которого зарплата лучшего друга это больше, чем его зарплата.

Я смущен при понимании этого решения.

ответ

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; 
+0

, что это правильно - я просто нужно понимать, что, как мы можем сравнить зарплату от начального присоединяется к зарплате от подзапроса когда обе дают одинаковые результаты? –

+0

@Nikhilvyas, вы видели редактирование в ответ? – Rahul

+0

Да, запрос bro-ur правильный, но мне нужно понять часть - p.salary

Смежные вопросы