我有两张表,比如Table1
和Table2
表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
位于FromRN
之间的ToRN
和Table2
之间的所有记录╔════╦════╗
║ ID ║ RN ║
╠════╬════╣
║ 11 ║ 1 ║
║ 12 ║ 2 ║
║ 13 ║ 3 ║
║ 16 ║ 6 ║
║ 17 ║ 7 ║
║ 18 ║ 8 ║
║ 10 ║ 10 ║
╚════╩════╝
所以我的预期输出是:
{{1}}
可以在这里找到创建模式的SQLFiddle:
答案 0 :(得分:9)
您可以执行这两个表中的INNER JOIN
来过滤Table1
RN
值不属于Table2
范围内任何范围的记录:
SELECT t1.ID, t1.RN
FROM Table1 t1
INNER JOIN Table2 t2
ON t1.RN >= t2.FromRN AND t1.RN <= t2.ToRN
按照以下链接进行正在运行的演示(由OP提供):
答案 1 :(得分:5)
你可以试试这个:
select t1.Id, t1.RN
from table1 t1
inner join table2 t2
on t1.Rn between t2.FromRn and t2.ToRn
答案 2 :(得分:3)
另一个解决方案是使用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 |