sql - 使用查找表在数据中搜索特定值
问题描述
我有一个查找表,其中包含要在数据中检查的值。
问题有点像这样:
-- Data with an ID, a group (which is a number) and some letters which belong to that group.
select *
into #data
from (values
(1, 45, 'A'),
(1, 45, 'B'),
(1, 45, 'C'),
(2, 45, 'D'))
as data(id, number, letter)
-- The various letters that I expect for each ID in a specific group
select *
into #expected_letters
from (values
(45, 'A'),
(45, 'D'),
(45, 'E'),
(123, 'A'),
(123, 'Q'))
as expected_letters(number, letter)
我期望从查询中得到的结果是我期望属于该组但不存在的所有字母(来自所有id
s from )。#data
所以这些结果实际上是:
(1, 45, D)
(1, 45, E)
(2, 45, A)
(2, 45, E)
在我的问题中,列表更长,包含更多组和更多 ID。我已经尝试了很多不同的连接和集合运算符,但我似乎无法解决这个问题。
一些帮助将不胜感激。
解决方案
这是我的版本,非常相似,但使用外部应用而不是多个连接。:-
select distinct d.id, aa.number,aa.letter from #data d
outer apply (select * from #expected_letters el where el.number=d.number and el.letter not in
(select letter from #data dt where dt.number=d.number and dt.id=d.id)
) aa
推荐阅读
- mysql - Mysql 过程语法更改为 Firebird 过程语法
- jenkins - Jenkins Blue Ocean 重试限时步骤,最多 n 次
- java - Selenium WebDriver:随机单击一行按钮
- javascript - 从axios回调后如何清除字段?
- android - getFilter() 在 RecyclerView 适配器中无法正常工作?
- airflow - 如何运行 Airflow DAG 特定次数?
- python-3.4 - ord() 函数或带有 Z3 Solver 的字符串的 ASCII 字符代码
- flutter - 颤动行mainAxisAlignment spaceBetween不工作
- robotframework - 如何在机器人框架的 FOR 循环中使用 if/else 条件
- python-3.x - 如何将主机 IP 地址分配给我的 POSTGRESQL 数据库