表(两列都不是唯一的,没有主键)
C1 | C2
===============
2 | 1
3 | 1
4 | 1
4 | 2
4 | 3
5 | 1
5 | 2
6 | 1
6 | 3
7 | 1
如果我查询C1列的3和4,我应该得到下表。不是特定的查询我可以在列而不是3或4中查询其他内容。
结果:
C1 | C2
===============
3 | 1
4 | 1
答案 0 :(得分:1)
您可以尝试:
SELECT C1, C2
FROM (
SELECT C1, C2, COUNT(C1) OVER (PARTITION BY C2) AS cnt
FROM (
SELECT DISTINCT C1, C2
FROM mytable
WHERE C1 IN (3,4) ) t ) s
WHERE s.cnt = 2
COUNT
的窗口版本用于计算每个C1
分区中C2
的不同次数的数量。如果此数字等于2
,那么我们显然有匹配。
请注意,需要额外级别的子查询,具有DISTINCT
子句的子查询,因为Postgresql不支持COUNT(DISTINCT ...) OVER ...
。
答案 1 :(得分:0)
试试这个
select c1,min(c2) as c2 from table
where c1 in (3,4)
group by c1