我有两列我怀疑有多余的信息-想象一下缩写和全名,其中缩写和全名可能是一对一的关系。我想弄清楚是否存在一对一的关系,并找出不签出的任何地方。
如果有帮助,我正在使用SQL Server。
我看过here。 但是,这并不是我所需要的,因为如果我有同一对的两个副本,它将进行标记。
我想做的事情与this question in Python更相似。看起来该功能在SQL中全部可用,但是由于还有其他上下文列,我希望能够查看关系不成立的地方(它们可能只是数据错误)。
例如该表很好:
col1 | col2 | context
1 | a | cont1
2 | b | cont2
3 | c | cont3
1 | a | cont4
3 | c | cont5
因为col1中的每1个都与'a'匹配,并且没有其他任何内容,每2个与'b'等匹配,等等。而每个'a'仅与'1'等匹配,等等。
此表不好:
col1 | col2 | context
1 | a | cont1
2 | b | cont2
3 | c | cont3
1 | b | cont4
3 | c | cont5
因为1与“ a”和“ b”都匹配。在这种情况下,我想以某种方式表明第一行,第二行和第四行有问题,应该接受人工检查。
目前,我假设没有NULL(我打算分别处理它们)
答案 0 :(得分:2)
您可以使用聚合来获取不良行。如果我理解正确:
select col1
from t
group by col1
having max(col2) <> min(col2);
如果要原始行,请使用exists
:
select t.*
from t
where exists (select 1 from t t2 where t2.col1 = t.col1 and t2.col2 <> t.col2);