首页 > 解决方案 > 使用查找表在数据中搜索特定值

问题描述

我有一个查找表,其中包含要在数据中检查的值。

问题有点像这样:

-- 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)

我期望从查询中得到的结果是我期望属于该组但不存在的所有字母(来自所有ids from )。#data所以这些结果实际上是:

(1, 45, D)
(1, 45, E)
(2, 45, A)
(2, 45, E)

在我的问题中,列表更长,包含更多组和更多 ID。我已经尝试了很多不同的连接和集合运算符,但我似乎无法解决这个问题。

一些帮助将不胜感激。

标签: sql

解决方案


这是我的版本,非常相似,但使用外部应用而不是多个连接。:-

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

推荐阅读