首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从SQL中的两列中找到唯一对?

如何从SQL中的两列中找到唯一对?
EN

Stack Overflow用户
提问于 2018-02-23 06:25:54
回答 4查看 4.4K关注 0票数 3

我有一个表“Dummy”,其中包含列"col1“和”col2“。

如何从(col1,col2)中找到唯一对。例如,在上表中,我如何仅获得(a,b)或(b,a)作为我的输出,而不是同时获得(a,b)和(b,a)。

代码语言:javascript
运行
复制
select
    distinct
    col1
    col2
from
    dummy
where
    dummy.col1 < dummy.col2
group by
    col1,
    col2;

上面的查询是错误的,因为它遗漏了对(d,c)。

EN

回答 4

Stack Overflow用户

发布于 2018-02-23 06:37:09

我更喜欢使用concat和group by

代码语言:javascript
运行
复制
SELECT 
col1,col2 
FROM 
tbl
GROUP BY CONCAT(LEAST(col1, col2), 
              GREATEST(col1, col2))

或者简单地说

代码语言:javascript
运行
复制
SELECT 
    col1,col2 
    FROM 
    tbl
group by LEAST(col1, col2),GREATEST(col1, col2)
票数 3
EN

Stack Overflow用户

发布于 2018-02-23 06:31:13

代码语言:javascript
运行
复制
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
)
票数 1
EN

Stack Overflow用户

发布于 2018-02-23 06:40:08

如果您不关心现有的组合是否以正确的顺序返回,例如,a,b也可能以b,a的形式返回

代码语言:javascript
运行
复制
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
;

但是如果你必须返回一个现有的行,那就更复杂了:

代码语言:javascript
运行
复制
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
);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48938232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档