gpt4 book ai didi

具有多个值和 where 子句的 MySQL 更新

转载 作者:太空宇宙 更新时间:2023-11-03 11:38:58 24 4
gpt4 key购买 nike

我被难住了。我已经阅读了很多与此类似的不同问题,但仍然无法弄清楚。

这是之前表的片段。 (POs_Parts)

+-------+------------+----------+---------+-------+----------+
| p_Key | f_key_part | f_key_po | partQty | r_qty | r_author |
+-------+------------+----------+---------+-------+----------+
| 0 | 18 | 6 | 2 | 0 | NULL |
| 1 | 19 | 6 | 3 | 0 | NULL |
| 2 | 20 | 6 | 1 | 0 | NULL |
| 3 | 18 | 8 | 1 | 0 | NULL |
+-------+------------+----------+---------+-------+----------+

这是我希望它在更新语句之后的样子。 (最后两栏已经更新)

+-------+------------+----------+---------+-------+----------+
| p_Key | f_key_part | f_key_po | partQty | r_qty | r_author |
+-------+------------+----------+---------+-------+----------+
| 0 | 18 | 6 | 2 | 2 | John |
| 1 | 19 | 6 | 3 | 2 | John |
| 2 | 20 | 6 | 1 | 0 | John |
| 3 | 18 | 8 | 1 | 1 | John |
+-------+------------+----------+---------+-------+----------+

我认为这个语句做了我想要的 - 一行 - 但我有大量的行需要一次更改,所以我想避免执行很多一次一个陈述。

UPDATE POs_Parts SET r_qty = 2, r_author='John' where f_key_part = 18 and f_key_po = 6;

这是我试图用作引用的问题。 Multiple Updates in MySQL

我怎样才能重写它而不必运行一堆 Update 语句?我将使用 PHP 创建查询。如有任何建议,我们将不胜感激。

最佳答案

如果您按照您链接的引用,SQL 将类似于

INSERT INTO
POs_Parts (p_Key, f_key_part, f_key_po, partQty, r_qty, r_author)
VALUES
(0, 18, 6, 2, 2, 'John'),
(1, 19, 6, 3, 2, 'John'),
(2, 20, 6, 1, 0, 'John'),
(3, 18, 8, 1, 1, 'John')
ON DUPLICATE KEY UPDATE
f_key_part = VALUES(f_key_part),
f_key_po = VALUES(f_key_po),
partQty = VALUES(partQty),
r_qty = VALUES(r_qty),
r_author = VALUES(r_author)

(您可以省略未更改的列——我之前没有测试过或从未使用过这种语法。~~编辑:你不能省略列~~ 编辑 2:你可以省略列。请参阅下面更新的语法。)

我认为您会发现“一堆 SQL 语句”是更直接的途径。

这是我的测试:

MariaDB [test]> select * from POs_Parts;
+-------+------------+----------+---------+-------+----------+
| p_Key | f_key_part | f_key_po | partQty | r_qty | r_author |
+-------+------------+----------+---------+-------+----------+
| 0 | 18 | 6 | 2 | 0 | NULL |
| 1 | 19 | 6 | 3 | 0 | NULL |
| 2 | 20 | 6 | 1 | 0 | NULL |
| 3 | 18 | 8 | 1 | 0 | NULL |
+-------+------------+----------+---------+-------+----------+
4 rows in set (0.00 sec)

MariaDB [test]> INSERT INTO POs_Parts (p_Key, f_key_part, f_key_po, partQty, r_qty, r_author) VALUES (0, 18, 6, 2, 2, 'John'), (1, 19, 6, 3, 2, 'John'), (2, 20, 6, 1, 0, 'John'), (3, 18, 8, 1, 1, 'John') ON DUPLICATE KEY UPDATE f_key_part = VALUES(f_key_part), f_key_po = VALUES(f_key_po), partQty = VALUES(partQty), r_qty = VALUES(r_qty), r_author = VALUES(r_author);
Query OK, 8 rows affected (0.00 sec)
Records: 4 Duplicates: 4 Warnings: 0

MariaDB [test]> select * from POs_Parts;
+-------+------------+----------+---------+-------+----------+
| p_Key | f_key_part | f_key_po | partQty | r_qty | r_author |
+-------+------------+----------+---------+-------+----------+
| 0 | 18 | 6 | 2 | 2 | John |
| 1 | 19 | 6 | 3 | 2 | John |
| 2 | 20 | 6 | 1 | 0 | John |
| 3 | 18 | 8 | 1 | 1 | John |
+-------+------------+----------+---------+-------+----------+
4 rows in set (0.00 sec)

更短的语法:

INSERT INTO
POs_Parts (p_Key, r_qty, r_author)
VALUES
(0, 2, 'John'),
(1, 2, 'John'),
(2, 0, 'John'),
(3, 1, 'John')
ON DUPLICATE KEY UPDATE
r_qty = VALUES(r_qty),
r_author = VALUES(r_author)

关于具有多个值和 where 子句的 MySQL 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43475938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com