给出下表:
TABLE TEST
ID | NAME1 | NAME2
1 | 1 | 2
1 | 1 | 3
1 | 2 | 1
1 | 2 | 3
2 | 1 | 2
2 | 1 | 3
3 | 1 | 2
...我想通过(NAME1, NAME2)值对列表来查询记录的I。这是一种按子记录搜索父记录的方式,但是表不是在分层结构中定义的。
也就是说,通过[(1, 2), (1, 3)]查询应该会产生如下结果:
QUERY RESULT
ID | NAME1 | NAME2
2 | 1 | 2
2 | 1 | 3到目前为止,我所取得的成就是:
select *
from TEST as T
where exists (
select *
from (VALUES(1, 2), (1, 3)) as V(NAME1, NAME2)
where T.NAME1 = V.NAME1 AND T.NAME2= V.NAME2
)它返回:
1 | 1 | 2
1 | 1 | 3
2 | 1 | 2
2 | 1 | 3
3 | 1 | 2但我需要的是每个ID的精确匹配
发布于 2021-04-09 03:34:49
你似乎想要身份证。您可以使用聚合:
with pairs as (
select *
from (values (1, 2), (1, 3)) v(name1, name2)
)
select id
from test t left join
pairs p
on t.name1 = p.name1 and t.name2 = p.name2
group by id
having count(*) = count(p.name1) and
count(*) = (select count(*) from pairs);https://stackoverflow.com/questions/67010653
复制相似问题