我需要找到col2具有相同值但col3具有不同值的所有行。从上表中,它应该返回Pk1,Pk3和Pk4。我尝试了以下自我加入,但看到重复的记录。
SELECT T1.COL1,T1.COL2,T1.COl3
FROM Tab T1, Tab T2
WHERE T1.Col2=T2.Col1
AND T1.Col3 <> T2.Col3
;
答案 0 :(得分:0)
我会使用exists
:
select t.*
from t
where exists (select 1 from t t2 where t2.col2 = t.col2 and t2.col3 <> t.col3);
答案 1 :(得分:0)
解析函数更适合此类工作-避免所有联接。例如:
select col1, col2, col3
from (
select t.*,
case when min(col3) over (partition by col2) !=
max(col3) over (partition by col2) then 0 end as flag
from tab t
)
where flag = 0;
尚不清楚您要如何处理null
中的col3
-这算作“不同”值吗?如果您多次拥有null
(对于col2
中的相同值怎么办?另外-如果col2
可以是null
怎么办?
答案 2 :(得分:0)
尝试一下:
SELECT COL1,COL2,COL3 FROM
(SELECT COL1,COL2,COL3, COUNT(DISTINCT COL3) OVER (PARTITION BY COL2) CNT
FROM TEST)
WHERE CNT > 1
干杯!