Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để thay đổi giá trị cột trong MySQL?

Sử dụng coalesce() và một truy vấn con

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

CẬP NHẬT

Câu trả lời trước là không đầy đủ, vì R2D2 đã phát hiện ra khá đúng. Rất tiếc, bạn không thể thực hiện CTE trong mysql nên thay vào đó tôi đã tạo một dạng xem (Tôi đã mở rộng ví dụ bằng một cột khác 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>'';

Với chế độ xem này, bây giờ có thể làm như sau:

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

Không đẹp, nhưng nó hoàn thành công việc, xem tại đây: SQLfiddle

đầu vào:

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

đầu ra:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phân vùng trong mysql có tạo bảng hay chỉ là bảng ảo?

  2. Làm cách nào để đặt 'mệnh đề if' trong một chuỗi SQL?

  3. mySQL tổng của hai giá trị trong 2 bảng khác nhau

  4. Cách tìm và thay thế văn bản trong bảng mysql

  5. Sử dụng câu lệnh IN cho SQL tham số thủ tục được lưu trữ