我有一个table1,有如下字段。
rsid pos
123 10000
234 10001
567 10008
另一个table2只有一个字段
rsid
123
345
...
所以,我的目标是找到位置在一定范围内的rsids。 例如,我想在table1中找到rsid,其位置在table2中rsids的+ - 10000位置,例如123.
我可以为特定行编写sql,如下所示
select *
from table1
where pos > (select pos from table1 where rsid=123)-100000
and pos < (select pos from table1 where rsid=123)+100000;
但是在table2中,有成千上万的行,最后我想将所有合格的rsid合并到一个表中,有没有像循环一样联合所有结果? 非常感谢你的帮助?
更新
感谢您的回复。更具体的例子如下所示。假设table1只有以下条目。
rsid pos
123 10000
234 10001
567 10008
100 20015
101 20001
108 50000
和另一个table2只有这样的条目。
rsid
123
100
然后预期结果将是
rsid pos
234 10001
567 10008
101 20001
因为234,567在123的+ -10000范围内,101在101的+ -10000范围内。
答案 0 :(得分:0)
必须承认:我真的不明白这个问题。 所以这就是我的意思:
1)查找特定RSID的100,000以内的所有RSID
2)将这些结果创建到新表中。 (如果您只是使用select语法中的create table,则不需要循环和union。
3)不确定table2与什么有关,但我认为你只需要在table1和table2中都存在的RSID位置。
Create table NEWTable
Select RSID, pos
from table1 t1
INNER JOIN table2 t2 on t1.RSID = T2.RSID
WHERE t1.pos between
(select pos from table1 where rsid=123)-100000
and (select pos from table1 where rsid=123)+100000;
答案 1 :(得分:0)
select t1.pos from
(select distinct t1.pos from t1 join t2
where t1.pos between t2.pos-20000 and t2.pos+20000) t1
where t1.pos not in (select * from t2);