我有一个表“Dummy”,其中包含列"col1“和”col2“。
如何从(col1,col2)中找到唯一对。例如,在上表中,我如何仅获得(a,b)或(b,a)作为我的输出,而不是同时获得(a,b)和(b,a)。
select
distinct
col1
col2
from
dummy
where
dummy.col1 < dummy.col2
group by
col1,
col2;上面的查询是错误的,因为它遗漏了对(d,c)。

发布于 2018-02-23 06:37:09
我更喜欢使用concat和group by
SELECT
col1,col2
FROM
tbl
GROUP BY CONCAT(LEAST(col1, col2),
GREATEST(col1, col2))或者简单地说
SELECT
col1,col2
FROM
tbl
group by LEAST(col1, col2),GREATEST(col1, col2)发布于 2018-02-23 06:31:13
SELECT
x,
y
FROM
(
SELECT
DISTINCT
col1 AS x,
col2 AS y
FROM
dummy
WHERE
col1 <> col2
UNION
SELECT
DISTINCT
col1 AS y,
col2 AS x
FROM
dummy
WHERE
col1 <> col2
)发布于 2018-02-23 06:40:08
如果您不关心现有的组合是否以正确的顺序返回,例如,a,b也可能以b,a的形式返回
SELECT DISTINCT
CASE WHEN col1 > col2 THEN col2 ELSE col1 end, -- similar to LEAST
CASE WHEN col1 < col2 THEN col2 ELSE col1 end -- similar to GREATEST
FROM dummy
;但是如果你必须返回一个现有的行,那就更复杂了:
SELECT t1.*
FROM dummy AS t1 LEFT JOIN dummy AS t2
ON t1.col1 = t2.col2
AND t1.col2 = t2.col1
AND t1.col1 > t2.col1
WHERE t2.col1 IS NULL
;
SELECT col1,col2
FROM dummy AS t1
WHERE NOT EXISTS(
SELECT * FROM dummy t2
WHERE t1.col1 = t2.col2
AND t1.col2 = t2.col1
AND t1.col1 > t2.col1
);https://stackoverflow.com/questions/48938232
复制相似问题