如何在同一个表中查询

问题描述 投票:0回答:2

我需要根据同一个表的内容查询单个表

目前我在in中使用了and,这需要花费大量时间来查询并且我知道它不是最聪明的方式

PID CID Status
1   1   1
1   2   0
1   3   1
1   4   1
1   5   1
2   1   1
2   2   1
2   3   1
2   4   0
2   5   0

从上表中我需要满足以下组合的结果

Select PID from Tablename where 
(CID in (1) AND status 1)
AND
(CID in (2,3) AND status = 1)
AND
(CID in (4) AND status = 1)
AND 
(CID in (5) AND status = 1)

因此,按照上述要求,我应该只获得PID 1

sql join self-join
2个回答
1
投票

这应该得到所有select语句中存在的所有PID:

SELECT PID FROM TableName WHERE CID = 1 AND Status = 1
INTERSECT
SELECT PID FROM TableName WHERE CID IN (2, 3) AND Status = 1
INTERSECT
SELECT PID FROM TableName WHERE CID = 4 AND Status = 1
INTERSECT
SELECT PID FROM TableName WHERE CID = 5 AND Status = 1

0
投票

你似乎想要:

Select PID
from Tablename 
where status = 1
group by PID
having sum(case when CID in (1) then 1 else 0 end) > 0 and
       sum(case when CID in (2, 3) then 1 else 0 end) > 0 and
       sum(case when CID in (4) then 1 else 0 end) > 0 and
       sum(case when CID in (5) then 1 else 0 end) > 0;

您的查询仅测试单行中的值。 where条件永远不会评估为真。

Here是一个db <>小提琴,显示这会为您示例中的数据返回PID = 1。

© www.soinside.com 2019 - 2024. All rights reserved.