根据单元格值更新MySql选项卡

根据单元格值更新MySql选项卡,mysql,Mysql,我在下面有一个表格,有不同的栏目。 我想根据其他字段上的值更新某些字段中的值 我的桌子在这里 DROP TABLE IF EXISTS my_table; CREATE TABLE my_table (id INT NOT NULL AUTO_INCREMENT UNIQUE, Shot VARCHAR(4), lay VARCHAR(15) NOT NULL, lay_avaibility VARCHAR(15) NOT NULL, blk VARCHAR(10) NOT NULL, blk

我在下面有一个表格,有不同的栏目。 我想根据其他字段上的值更新某些字段中的值

我的桌子在这里

DROP TABLE IF EXISTS my_table; 
CREATE TABLE my_table
(id INT NOT NULL AUTO_INCREMENT UNIQUE,
Shot VARCHAR(4),
lay VARCHAR(15) NOT NULL,
lay_avaibility VARCHAR(15) NOT NULL,
blk VARCHAR(10) NOT NULL,
blk_avaibility VARCHAR(15) NOT NULL,
pri VARCHAR(10) NOT NULL,
pri_avaibility VARCHAR(15) NOT NULL,
ani VARCHAR(10) NOT NULL,
ani_avaibility VARCHAR(15) NOT NULL,
status VARCHAR(5)
);

INSERT INTO my_table VALUES
(1,'SH01','1863','Offline','1863','Offline','P4645','Offline','P4557','Offline','Over'),
(2,'SH02','1863','Offline','P4645','Offline','P4557','Offline','1863','Offline','Over')
(3,'SH03','P4645','Offline','P4557','Offline','1863','Offline','1863','Offline','WIP'),
(4,'SH04','1863','Offline','P4645','Offline','P4557','Offline','1863','Offline','RTK'),
(5,'SH05','1863','Offline','1863','Offline','P4645','Offline','P4557','Offline','WIP'),
(6,'SH06','P4557','Offline','P4645','Offline','P4645','Offline','P4557','Offline','WIP');

SELECT * FROM my_table;

+----+------+-------+----------------+-------+----------------+-------+----------------+-------+----------------+--------+
| id | Shot | lay   | lay_avaibility | blk   | blk_avaibility | pri   | pri_avaibility | ani   | ani_avaibility | status |
+----+------+-------+----------------+-------+----------------+-------+----------------+-------+----------------+--------+
|  1 | SH01 | 1863  | Offline        | 1863  | Offline        | P4645 | Offline        | P4557 | Offline        | Over   |
|  2 | SH02 | 1863  | Offline        | P4645 | Offline        | P4557 | Offline        | 1863  | Offline        | Over   |
|  3 | SH03 | P4645 | Offline        | P4557 | Offline        | 1863  | Offline        | 1863  | Offline        | WIP    |
|  4 | SH04 | 1863  | Offline        | P4645 | Offline        | P4557 | Offline        | 1863  | Offline        | RTK    |
|  5 | SH05 | 1863  | Offline        | 1863  | Offline        | P4645 | Offline        | P4557 | Offline        | WIP    |
|  6 | SH06 | P4557 | Offline        | P4645 | Offline        | P4645 | Offline        | P4557 | Offline        | WIP    |
+----+------+-------+----------------+-------+----------------+-------+----------------+-------+----------------+--------+
6 rows in set (0.00 sec)

SELECT VERSION();

+-----------+
| VERSION() |
+-----------+
| 5.5.23    |
+-----------+
1 row in set (0.02 sec)
我想将所有lay_Availability、blk_Availability、pri_Availability、ani_Availability列更新为'Online',其中lay、pri、blk、ani列具有'1863',即,最终的表格应如下所示

+----+------+-------+----------------+-------+----------------+-------+----------------+-------+----------------+--------+
| id | Shot | lay   | lay_avaibility | blk   | blk_avaibility | pri   | pri_avaibility | ani   | ani_avaibility | status |
+----+------+-------+----------------+-------+----------------+-------+----------------+-------+----------------+--------+
|  1 | SH01 | 1863  | Online         | 1863  | Online         | P4645 | Offline        | P4557 | Offline        | Over   |
|  2 | SH02 | 1863  | Online         | P4645 | Offline        | P4557 | Offline        | 1863  | Online         | Over   |
|  3 | SH03 | P4645 | Offline        | P4557 | Offline        | 1863  | Online         | 1863  | Online         | WIP    |
|  4 | SH04 | 1863  | Online         | P4645 | Offline        | P4557 | Offline        | 1863  | Online         | RTK    |
|  5 | SH05 | 1863  | Online         | 1863  | Online         | P4645 | Offline        | P4557 | Offline        | WIP    |
|  6 | SH06 | P4557 | Offline        | P4645 | Offline        | P4645 | Offline        | P4557 | Offline        | WIP    |
+----+------+-------+----------------+-------+----------------+-------+----------------+-------+----------------+--------+

您应该能够将这样的CASE语句与Update命令一起使用:

UPDATE my_table 
    SET lay_availability = CASE WHEN lay = '1863' THEN 'Online' ELSE lay_availability END,
    blk_availability = CASE WHEN blk = '1863' THEN 'Online' ELSE blk_availability END,
    pri_availability = CASE WHEN pri = '1863' THEN 'Online' ELSE pri_availability END,
    ani_avaibility   = CASE WHEN ani = '1863' THEN 'Online' ELSE ani_avaibility END;

您应该能够将这样的CASE语句与Update命令一起使用:

UPDATE my_table 
    SET lay_availability = CASE WHEN lay = '1863' THEN 'Online' ELSE lay_availability END,
    blk_availability = CASE WHEN blk = '1863' THEN 'Online' ELSE blk_availability END,
    pri_availability = CASE WHEN pri = '1863' THEN 'Online' ELSE pri_availability END,
    ani_avaibility   = CASE WHEN ani = '1863' THEN 'Online' ELSE ani_avaibility END;
试试这个

  UPDATE my_table 
SET lay_availability = CASE WHEN lay = '1863' THEN 'Online' ELSE 'Offline' END,
blk_availability = CASE WHEN blk = '1863' THEN 'Online' ELSE 'Offline' END,
pri_availability = CASE WHEN pri = '1863' THEN 'Online' ELSE 'Offline' END,
ani_avaibility   = CASE WHEN ani = '1863' THEN 'Online' ELSE 'Offline' END;
试试这个

  UPDATE my_table 
SET lay_availability = CASE WHEN lay = '1863' THEN 'Online' ELSE 'Offline' END,
blk_availability = CASE WHEN blk = '1863' THEN 'Online' ELSE 'Offline' END,
pri_availability = CASE WHEN pri = '1863' THEN 'Online' ELSE 'Offline' END,
ani_avaibility   = CASE WHEN ani = '1863' THEN 'Online' ELSE 'Offline' END;

与上面的萨西·坎特的回答相同。这甚至更新了其他单元格,这些单元格的“p4645”与上面的Sashi Kanth的答案相同。这甚至更新了其他具有“p4645”Sol的单元,它也有小问题。这是将其他“1863”更新为不应发生的“脱机”。它应该只影响“1863”相关单元格。现在看看答案,我更新了它以保留列的现有值,并且仅当对应列为1863时才更新它。这应该可以解决你的问题。如果你对我的问题感到困惑,我很抱歉。我只想更新“1863”记录,其他记录应该完好无损。它们不应该得到更新。有些时候,P4557或P4645也可能是“在线”的,但这句话使“1863”到“在线”和其他到“离线”的工作非常完美。。。Thx对于solutionSol来说,也有小问题。这是将其他“1863”更新为不应发生的“脱机”。它应该只影响“1863”相关单元格。现在看看答案,我更新了它以保留列的现有值,并且仅当对应列为1863时才更新它。这应该可以解决你的问题。如果你对我的问题感到困惑,我很抱歉。我只想更新“1863”记录,其他记录应该完好无损。它们不应该得到更新。有些时候,P4557或P4645也可能是“在线”的,但这句话使“1863”到“在线”和其他到“离线”的工作非常完美。。。Thx用于解决方案,但我添加了
ani\u Availability
您正在编写,但他错过了。任何人都可以假设它并添加。谢谢你的回答,但我加上了你的回答,但他错过了。任何人都可以假设它并添加。谢谢你的回答