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