使用按字母顺序排序的其他字段值更新字段

时间:2017-05-04 14:26:21

标签: mysql sql

我有一个表(" mytable")和一些字符串字段(" p1,p2 ... p6")。

我有一个名为plA和plB的空字段,我想要更新。

plA必须包含按字母顺序排序并用逗号分隔的p1,p2和p3值的串联。

plB必须包含按字母顺序排序并用逗号分隔的p4,p5和p6值的串联。

这里有一部分mytable和想要的结果:

 p1     p2     p3     p4     p5     p6     
 "tpa"  "rst"  "abc"  "cba"  "rpt"  "klw"
 "mtb"  "adr"  "aab"  "mav"  "bad"  "goo"

我想更新表,plA和plB必须包含:

 plA              plB
 "abc,rst,tpa"    "cba,klw,rpt"
 "aab,adr,mtb"    "bad,goo,mav"

谢谢!

1 个答案:

答案 0 :(得分:1)

如果我假设值都是不同的且永远不会NULL,你可以用一些比较逻辑来做到这一点:

    SELECT CONCAT_WS(',',
                 LEAST(p1, p2, p3),
                 (CASE WHEN p1 NOT IN ( LEAST(p1, p2, p3), GREATEST(p1, p2, p3) ) THEN p1
                       WHEN p2 NOT IN ( LEAST(p1, p2, p3), GREATEST(p1, p2, p3) ) THEN p1
                       ELSE p3
                  END),
                 GREATEST(p1, p2, p3)
                ) AS ps,
        CONCAT_WS(',',
                 LEAST(p4, p5, p6),
                 (CASE WHEN p4 NOT IN ( LEAST(p4, p5, p6), GREATEST(p4, p5, p6) ) THEN p4
                       WHEN p5 NOT IN ( LEAST(p4, p5, p6), GREATEST(p4, p5, p6) ) THEN p5
                       ELSE p6
                  END),
                 GREATEST(p4, p5, p6)
                ) AS ps
FROM ...

我应该强调数据结构看起来不对。你应该存储每个" p"值在一个单独的行上。

此外,这不会超出3个值。