如何在列B的多个值中查找列A的行(反之亦然)

时间:2016-03-02 00:38:20

标签: mysql

鉴于以下架构,我想返回A或B出现在多个不是单个配对的行中的行。

例如:

fruitl + fruitU应该是表中唯一的组合。例如。 apple + Apple没问题,但如果我们看到apple + APple或Apple + Apple,那么数据质量就会出现问题。

基本上A + B应该是一个独特的组合。

 fruitl | fruitu | ...
----------------------
 apple  | Apple  | ...
 apple  | Apple  | ...
 apple  | APple  | ...
 banana | Banana | ...
 banana | Banana | ...
 peach  | Peach  | ...
 peach  | Peach  | ...

从上表中查询将显示...

apple |苹果

apple |苹果

因为apple与两个独特的值配对。

我一直在使用类似下面的东西来接近它,但这似乎只会返回不同的值。

数据库中有无限数量的潜在成果。

select *
from table
group by fruitl, fruitu
having count(*) > 1;

1 个答案:

答案 0 :(得分:1)

嗯,我想你想要这样的东西:

select t.*
from table t
where (A in ('a', 'b') or B in ('a', 'b')) and not (A = 'a' and B = 'b');

我不确定你是否也想要not (A = 'b' and B = 'a')。关于这种组合的问题尚不清楚。

还有其他表达逻辑的方法,但这似乎与您的描述最为吻合。