我需要根据同一个表的内容查询单个表
目前我在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
这应该得到所有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
你似乎想要:
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。