如何在一個 SQL 查詢中將多行中的一列更新為不同的內容,同時忽略而不是插入帶有非重復鍵的行?
在這個小例子中,“column3”是應該更新的列。因此,如果 id 為 5 的行不存在,則不應插入該行。使用 INSERT ON DUPLICATE KEY UPDATE 將插入不存在的那些,因此這將不起作用。請注意,可能有許多行要更新。dbfiddle: https://www.db-fiddle.com/f/vhqJXYFy52xRtVBc97R1EL/0
CREATE TABLE t1 (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
column2 INT NOT NULL,
column3 INT NOT NULL);
INSERT INTO t1
VALUES
(1, 1, 10),
(7, 2, 20);
INSERT INTO t1 (id,column2,column3)
VALUES
(1,0,2),
(5,0,3),
(7,0,4)
ON DUPLICATE KEY UPDATE column3=VALUES(column3);
SELECT * FROM t1;
uj5u.com熱心網友回復:
如果你的第二個 dqata 是一張像這里這樣的表,你可以用正確的ONclauswe加入這兩個表
架構 (MySQL v5.7)
CREATE TABLE t1 (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
column2 INT NOT NULL,
column3 INT NOT NULL);
INSERT INTO t1
VALUES
(1, 1, 10),
(7, 2, 20);
UPDATE t1
JOIN ( SELECT
1 AS id,0 AS col2,2 AS col3 UNION
SELECT 5,0,3 UNiON
SELECT 7,0,4) t2 ON t2.id = t1.id
SET t1.column3 = t2.col3;
查詢#1
SELECT * FROM t1;
| ID | 列2 | 第3列 |
|---|---|---|
| 1 | 1 | 2 |
| 7 | 2 | 4 |
在 DB Fiddle 上查看
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/322817.html
上一篇:從兩個不同的表中找到最小值最大值
