2017-01-12 4 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は同じ給与結果をもたらすべきではありませんか? - どうすれば比較できるのか? ID、名前

表2 - - (ここでは、各idは1 friend_id(親友)とリンクされている)友人 参照の

は、以下のサンプル表

テーブルの1-学生 列を使用します列 - 親友の給与の友人の名前を見つけるしようとすると、ID、給与

- パッケージ 列 - ID、

表3をfriend_id彼の給料以上です。

この解決策を理解するのは混乱します。

答えて

1

そのwhereサブクエリ部分が間違っているため、サブクエリは複数のレコードを返し、スカラー値を受け入れるので、<演算子では使用できません。むしろ正しいです

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

であるためにあなたのクエリを変更

だけでなく

JOIN packages pp ON pp.id = f.friend_id AND p.salary < pp.salary 
ようJOINにそれを変更 - 私はちょうど私たちは初期から給与を比較することができる方法は、サブクエリから給与に参加することを理解する必要がありますどちらの場合でも同じ結果が得られますか? –

+0

@Nikhilvyas、あなたは答えを編集しましたか? – Rahul

+0

yes bro - urクエリーは正しいですが、私はpart-p.salary

関連する問題