2017-05-04 82 views
0

我有一个表(“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

如果我假设值都不同,从不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个值。

+0

发生了什么事group_concat命令?最快/最快?http://stackoverflow.com/questions/15773804/order-before-concat-ws – xQbert

+0

p1到p10代表不同的球员在篮球比赛中活跃。每一行都是游戏中的一个游戏,所以我不能将每个p存储在不同的行上。我需要使用超过3 p的答案。 – Javi

+0

@戈登Linoff ive将p25更改为p5,那么它应该没有错误地工作。 –