2016-02-02 163 views
3

我有兩個表,說Table1Table2選擇記錄

表1

╔════╦════╗ 
║ ID ║ RN ║ 
╠════╬════╣ 
║ 11 ║ 1 ║ 
║ 12 ║ 2 ║ 
║ 13 ║ 3 ║ 
║ 14 ║ 4 ║ 
║ 15 ║ 5 ║ 
║ 16 ║ 6 ║ 
║ 17 ║ 7 ║ 
║ 18 ║ 8 ║ 
║ 19 ║ 9 ║ 
║ 10 ║ 10 ║ 
╚════╩════╝ 

表2

╔════╦════════╦══════╗ 
║ ID ║ FromRN ║ ToRN ║ 
╠════╬════════╬══════╣ 
║ 1 ║ 1 ║ 3 ║ 
║ 2 ║ 6 ║ 8 ║ 
║ 3 ║ 10 ║ 10 ║ 
╚════╩════════╩══════╝ 

我想從Table1所有這些記錄其RN在於FromRNToRN之間的任何範圍介於Table2

所以我預期的輸出結果是:

╔════╦════╗ 
║ ID ║ RN ║ 
╠════╬════╣ 
║ 11 ║ 1 ║ 
║ 12 ║ 2 ║ 
║ 13 ║ 3 ║ 
║ 16 ║ 6 ║ 
║ 17 ║ 7 ║ 
║ 18 ║ 8 ║ 
║ 10 ║ 10 ║ 
╚════╩════╝ 

SQLFiddle創建模式可以在這裏找到:

http://sqlfiddle.com/#!3/90d50

回答

4

你可以做一個這兩個表的INNER JOINTable1RN值不發過濾掉那些記錄LL到任何範圍Table2

SELECT t1.ID, t1.RN 
FROM Table1 t1 
INNER JOIN Table2 t2 
    ON t1.RN >= t2.FromRN AND t1.RN <= t2.ToRN 

按照下面的運行演示的連接(OP提供):

SQLFiddle

2

而另一種解決方案是使用EXISTS -

SELECT 
* 
FROM table1 t1 
WHERE EXISTS (SELECT 1 FROM table2 
    WHERE t1.rn >= FromRN 
    AND t1.rn <= ToRN) 

結果

| ID | RN | 
|----|----| 
| 11 | 1 | 
| 12 | 2 | 
| 13 | 3 | 
| 16 | 6 | 
| 17 | 7 | 
| 18 | 8 | 
| 20 | 10 | 
4

你可以試試這個:

select t1.Id, t1.RN 
from table1 t1 
inner join table2 t2 
on t1.Rn between t2.FromRn and t2.ToRn