首页 > 解决方案 > 如何根据两个列值是否“跨越”另一个表中的任何值进行过滤?

问题描述

一个例子来说明我正在尝试做的事情:

表 A

指数 第一价值 第二值
1 340 700
2 20 250
3 60 150
4 180 540
5 590 1000

表 B

跨界值
190
830
300

期望的输出:

指数 第一价值 第二值
1 340 700
3 60 150

我想过滤掉任何行,对于任何 StraddleValue,FirstValue < StraddleValue AND SecondValue > StraddleValue。我不确定如何在不对 StraddleValues 进行硬编码的情况下做到这一点……这显然是不可扩展的。

谢谢。

标签: sqltsql

解决方案


您可以使用not exists

select a.*
from a
where not exists (select 1
                  from b
                  where a.FirstValue < b.StraddleValue and
                        a.SecondValue > b.StraddleValue
                 );

推荐阅读