MYSQL在两列中selectDISTINCT值

我想在数据库中select不同的值。 让我通过一个简单的例子来运行你。

表:

foo bar --- --- ac cf da ca fc ac da ac ca fc 

对,让我们说我的SQL是SELECT DISTINCT foo, bar from table 。 这些是我的结果:

 foo bar --- --- ac cf da ca fc 

然而,问题在于, ac / ca重复只是它们的顺序不同而已。 我不想select这些,我想要从这两个列中不同的值,请帮助!

非常非常邪恶和邪恶:

 select distinct least(foo, bar) as value1 , greatest(foo, bar) as value2 from table 

如何使用GROUP BY?

SELECT foo,bar FROM my_table GROUP BY foo,bar

怎么样 :

 SELECT DISTINCT a.foo,a.bar FROM table a LEFT JOIN table b ON a.foo=b.bar and a.bar=b.foo WHERE b.foo IS NULL AND b.bar IS NULL 

你要求的是与对称闭包相反的东西(我不知道它是否有一个特殊的名字,反对称的东西,因为它不是闭包)。 对于需要比较两个不同列的情况下的闭包和闭包,可以使用连接。 为了确保在跨列重复时不过滤两行,您需要一种方法来区分重复,并包含其中的一个,例如,通过在第一个较小的位置包括该对。

 SELECT DISTINCT t1.foo, t1.bar FROM `table` t1 LEFT JOIN `table` t2 ON t1.foo=t2.bar AND t1.bar=t2.foo WHERE t2.foo IS NULL OR t1.foo <= t1.bar; 
  SELECT foo, bar FROM tableX WHERE foo <= bar UNION SELECT bar, foo FROM tableX WHERE bar < foo 
 SELECT DISTINCT foo, bar FROM table WHERE CONCAT(',',foo,bar,) NOT IN ( SELECT CONCAT(',',bar,foo) FROM table ) 

这适用于我:

 SELECT DISTINCT LEAST(sub.foo, sub.bar) as value_1 , GREATEST(sub.foo, sub.bar) as value_2 FROM (SELECT a.foo ,a.bar FROM table a JOIN table b on a.foo = b.bar and a.bar = b.foo) sub