2010-11-25 15 views
1

私は、SQLを習得しようとすると、次のないSQLクエリを記述しようとしている:ネストされたSQLクエリ

私は2つのテーブルがあります。

SalaryRangeTable: id, beginRange, endRange 
UserInfoTable: id, salary, ... 

私が最初にしたい:

をSalaryRangeTableを繰り返し、beginRangeとendRangeを選択します。

次に、そのテーブルの各エントリについて、私はできるようになります:

SELECT id FROM UserInfoTable WHERE salary > beginRange AND salary < endRange 

したがって、結果セットには、その範囲を持つすべてのUserInfoTable IDが含まれます。

アイデア?

ありがとうございました。

+0

あなたがsqlで始まったばかりの場合 - 反復の考え方を避けるようにしてください。結合について考えてみてください –

答えて

2
select s.beginRange, s.endRange, u.id 
from SalaryRange s 
inner join UserInfo u on u.salary > s.beginRange AND u.salary < s.endRange 
+0

'between'は排他的ではなく包括的な比較を行います。 – Guffa

+0

包括的でないようにクエリが変更されました。 – RedFilter

1

あなたがテーブルを結合することができ、かつ取り除くためにdistinctを使用する必要がありますあなたが排他的な比較が必要な場合は使用し、その後、この

Select id from userInfoTable u 
Where Exists (Select * From salaryRangeTable 
       Where u.Salary Between 
         BeginRange and endRange) 

を試してみてください>と<

Select id from userInfoTable u 
Where Exists (Select * From salaryRangeTable 
       Where u.Salary > BeginRange 
       And u.Salary < endRange) 
+0

「間」は包括的な比較を排除するものではありません。 – Guffa

1

重複範囲から重複する:

select distinct u.id 
from SalaryRange s 
inner join UserInfo u on u.salary > s.beginRange and u.salary < s.endRange 
関連する問題