sql >> Databasteknik >  >> RDS >> Mysql

Hur ändrar man kolumnvärden i MySQL?

Använd coalesce() och en underfråga

select id, o1, 
       CASE WHEN o2!=o1 THEN o2 END o2,
       CASE WHEN o3!=o2 THEN o3 END o3 
FROM
( select id, coalesce(org1,org2,org3) o1,
             coalesce(org2,org3)      o2,
                      org3            o3 from tbl ) t

UPPDATERA

Det tidigare svaret var inte tillräckligt, vilket R2D2 med rätta fick reda på. Tyvärr kan du inte göra CTE i mysql så jag skapade en vy istället (jag utökade exemplet med en annan kolumn org4 ):

CREATE VIEW vert AS 
select id i,1 n, org1 org FROM tbl where org1>'' UNION ALL
select id,2, org2 FROM tbl where org2>'' UNION ALL
select id,3, org3 FROM tbl where org3>'' UNION ALL
select id,4, org4 FROM tbl where org4>'';

Med denna vy är det nu möjligt att göra följande:

SELECT id,
(select org from vert where i=id order by n limit 1) org1,
(select org from vert where i=id order by n limit 1,1) org2,
(select org from vert where i=id order by n limit 2,1) org3,
(select org from vert where i=id order by n limit 3,1) org4
FROM tbl

Inte vackert, men det får jobbet gjort, se här:SQLfiddle

input:

| id |   org1 |   org2 |    org3 |   org4 |
|----|--------|--------|---------|--------|
|  1 |     HR | (null) |   Staff |     IT |
|  2 | (null) |     IT |     Dev | (null) |
|  3 | (null) | (null) | Finance |     HR |

utdata:

| id |    org1 |  org2 |   org3 |   org4 |
|----|---------|-------|--------|--------|
|  1 |      HR | Staff |     IT | (null) |
|  2 |      IT |   Dev | (null) | (null) |
|  3 | Finance |    HR | (null) | (null) |


  1. Använda URL-parametrar i MYSQL-sökning

  2. MySQL LEFT JOIN 3 bord

  3. MySQL:SUM() med JOIN returnerar felaktiga värden

  4. Så här kontrollerar du datumformatet för din Oracle-session