我有一张桌子:
CREATE TABLE Cl
(
PropId int,
ClId int
);
INSERT INTO Cl
(PropId, ClId)
VALUES
(1, 1),
(1, 2),
(1, 3),
(2, 1),
(2, 2),
(3, 1),
(4, 1),
(4, 2),
(5, 1),
(5, 2);
PropId ClId
1 1
1 2
1 3
2 1
2 2
3 1
4 1
4 2
5 1
5 2
我想构建一个返回的查询:
PropId
2
4
5
当我处于“WHERE”状态时,我只有PropId = 2。表连接必须通过ClId值。提前致谢。 sqlfiddle
答案 0 :(得分:0)
您可以使用group by
和having
。这是一种方法:
select propid
from c1
group by propid
having sum(case when clid = 1 then 1 else 0 end) > 0 and
sum(case when clid = 2 then 1 else 0 end) > 0 and
count(distinct clid) = 2;
答案 1 :(得分:0)
关于问题的评论:
(...)我的
PropId
中只有2个,首先我必须转到CliId
价值并根据它们(价值观及其分割)来实现 我的PropId
输出。 (...)
如果segmentation
表示一组计数等于或大于1的记录,则需要以这种方式连接数据:
SELECT C.PropId
FROM Cl C INNER JOIN (
SELECT B.ClId
FROM Cl B
WHERE B.PropId = 2
) D ON D.Clid = C.Clid
GROUP BY C.PropID
HAVING COUNT(c.ClId )>1
注意:结果将是:{1, 2, 4, 5}
。为什么?
因为D
子查询返回ClId
:{1, 2}
集合,并且有4条PropId
条记录符合条件。