2010-11-25 12 views
1

Ich versuche, SQL zu lernen und zu versuchen, eine SQL-Abfrage zu schreiben, macht folgendes:Verschachtelte SQL Query

Ich habe zwei Tabellen:

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

Ich möchte zuerst:

iterieren SalaryRangeTable, wählen und endrange beginrange

Dann für jeden Eintrag in der Tabelle, ich möchte in der Lage sein:

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

Daher enthält meine Ergebnismenge alle UserInfoTable-IDs mit diesem Bereich.

Irgendwelche Ideen?

Danke.

+0

Wenn Sie gerade mit sql beginnen - versuchen Sie zu vermeiden, in Iterationen zu denken .. denken Sie in Bezug auf Joins –

Antwort

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

Beachten Sie, dass "zwischen" inklusive Vergleiche, nicht ausschließlich. – Guffa

+0

Abfrage geändert, um nicht inklusive zu sein. – RedFilter

1

Versuchen Sie, diese

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

Wenn Sie exklusive Vergleiche benötigen, dann verwenden> und <

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

Beachten Sie, dass "zwischen" inklusive Vergleiche, nicht exklusiv ist. – Guffa

1

sollten Sie in der Lage sein, die Tabellen zu verknüpfen, und verwenden Sie distinct loswerden Duplikate aus überlappenden Bereichen:

select distinct u.id 
from SalaryRange s 
inner join UserInfo u on u.salary > s.beginRange and u.salary < s.endRange