我有一个表(" 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"
谢谢!
答案 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个值。