首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按对组查询

问按对组查询
EN

Stack Overflow用户
提问于 2021-04-09 03:28:19
回答 1查看 34关注 0票数 1

给出下表:

代码语言:javascript
复制
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)]查询应该会产生如下结果:

代码语言:javascript
复制
QUERY RESULT

ID | NAME1 | NAME2
2  | 1     | 2
2  | 1     | 3

到目前为止,我所取得的成就是:

代码语言:javascript
复制
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
)

它返回:

代码语言:javascript
复制
1  | 1     | 2
1  | 1     | 3
2  | 1     | 2
2  | 1     | 3
3  | 1     | 2

但我需要的是每个ID的精确匹配

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-09 03:34:49

你似乎想要身份证。您可以使用聚合:

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67010653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档