V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qiyong
V2EX  ›  程序员

sql AB, BA 去重问题请教

  •  
  •   qiyong · 62 天前 · 1018 次点击
    这是一个创建于 62 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求为:表中同时存在数据 AB 和 BA ,如{34 ,66} 和 {66 ,34} 但我们只想保留其中一种情况( AB 和 BA 视为同一种情况),如果表数据如下怎么做?

    num_1 num_2
    30 24
    24 30
    958 497
    88 99
    9 条回复    2022-11-29 15:11:16 +08:00
    malusama
        1
    malusama  
       62 天前
    num_1 和 num_2 拼接, 排序, 然后用 row_number 打上序号
    只去一个就可以
    qinrui
        2
    qinrui  
       62 天前
    update table xxx set num_3 =case when num_1>num_2 then num_2 else num_1 end ,num_4= case when num_1>num_2 then num_1 else num_2 end
    optional
        3
    optional  
       62 天前 via iPhone
    对 ab 排序拼接,然后 group by 或者 district by
    optional
        4
    optional  
       62 天前 via iPhone
    打错了 distinct
    qiyong
        5
    qiyong  
    OP
       62 天前
    @optional 可否给出个 sql 呢
    qiyong
        6
    qiyong  
    OP
       62 天前
    @malusama
    @optional 可否给出个 sql 呢
    bxb100
        7
    bxb100  
       62 天前   ❤️ 1
    ```sql
    select distinct least(col_1, col_2), greatest(col_1, col_2)
    from the_table
    order by 1
    ```

    https://stackoverflow.com/questions/64422759/remove-duplicate-combinations-between-two-columns-of-char-data-type-in-sql
    SJH0402
        8
    SJH0402  
       62 天前
    @bxb100 老哥厉害
    zhzy0077
        9
    zhzy0077  
       62 天前
    create table A (
    id BIGINT IDENTITY(1,1),
    x int,
    y int
    );

    insert into A values (30, 24), (24, 30), (958, 497), (88, 99)

    这就是重复的行 要不重复的取个反就行

    SELECT * FROM A
    FULL OUTER JOIN A AA ON A.id <> AA.id
    WHERE (
    A.x = AA.x AND A.y = AA.y
    ) OR (
    A.x = AA.y AND A.y = AA.x
    )
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   1666 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 14:02 · PVG 22:02 · LAX 06:02 · JFK 09:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.