sql - 如何根据两个列值是否“跨越”另一个表中的任何值进行过滤?
问题描述
一个例子来说明我正在尝试做的事情:
表 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 进行硬编码的情况下做到这一点……这显然是不可扩展的。
谢谢。
解决方案
您可以使用not exists
:
select a.*
from a
where not exists (select 1
from b
where a.FirstValue < b.StraddleValue and
a.SecondValue > b.StraddleValue
);
推荐阅读
- bash - 使用 bash 获取活动的 kerberos 主体
- javascript - Javascript在恢复功能之前等待按钮按下
- angular - 垫子图标不显示
- javascript - 如何使用 .env 文件制作登录屏幕?
- swift - RxSwift 和 AVKit 的问题
- python-3.x - 如何在 PyQt5 的列表小部件中添加图像?
- javascript - 带有 useEffect 和 React Native 的 socket.IO 不会多次更新 Redux 状态
- excel - 有没有办法在 32 位 Excel 的 VBA 中存储 64、128 或 256 字节值?
- html - 超过页面末尾的下拉菜单
- typescript - TypeScript 与数组的交集