Sql 返回仅与给定值的*全部*匹配的记录
有关表格:Sql 返回仅与给定值的*全部*匹配的记录,sql,sql-server,tsql,Sql,Sql Server,Tsql,有关表格: Persons ------------------- PersonID (PK) FirstName LastName Descriptors ------------------- DescriptorID (PK) Description PersonDescriptors ------------------- PersonID (PK)(FK) DescriptorID (PK)(FK) 你好, 我有三个表:Persons、descriptor和personeds
Persons
-------------------
PersonID (PK)
FirstName
LastName
Descriptors
-------------------
DescriptorID (PK)
Description
PersonDescriptors
-------------------
PersonID (PK)(FK)
DescriptorID (PK)(FK)
你好,
我有三个表:Persons、descriptor和personedscriptors。我试图找出一个查询:
- 获取一个可能的人物描述列表(例如:22、11、9等)
- 读取PersonDescriptors表中的实际人员描述符记录(ex row:PersonID:107,DescriptorID:22)
- 仅当所有提供的描述符都匹配时,才返回匹配的PersonId
我缺少的想法,还是帮助?谢谢 使用
分组依据
和拥有
:
select pd.PersonId
from PersonDescriptors pd
where pd.DescriptorID IN (1, 71)
group by pd.PersonId
having count(distinct pd.DescriptorID) = 2;
您可以轻松地将其推广到任意长度的列表。请记住更改
having
子句中的常量。“…但是太慢了…”性能问题完全取决于您正在使用的特定DBMS产品,因此您应该让我们知道这是什么。这是关系划分:看看Joe Celko编写的这篇文章。抱歉,忘记了这一点。编辑文章:SQL Server 2014。这是我的dev box上的一个本地实例,但是WHERE NOT EXISTS查询需要20-60秒以上的时间
select pd.PersonId
from PersonDescriptors pd
where pd.DescriptorID IN (1, 71)
group by pd.PersonId
having count(distinct pd.DescriptorID) = 2;