簡體   English   中英

MySQL - 根據同一列的值的條件更新行

[英]MySQL - Update rows on criteria of values of the same column

我有一個小數據表

c1 c2 c3 c4
test_Tb
測試_T 1 2 3
測試_C 4 5 6
test_Mb
測試_M 7 8 9

我想為 c1 的值具有值 c1 = replace (c1, 'b', '') 的行更新列 c2、c3 和 c4

在單個請求中,但我什至不確定是否可以再使用

最后用行 test_T 的值更新 test_Tb,用行 test_M 的值更新 test_Mb

c1 c2 c3 c4
test_Tb 1 2 3
測試_T 1 2 3
測試_C 4 5 6
test_Mb 7 8 9
測試_M 7 8 9

要么我的請求不起作用,要么完成太慢......我迷路了。

謝謝你的幫助。

CREATE TABLE Data (
  c1 VARCHAR(255),
  c2 INT,
  c3 INT,
  c4 INT
);

INSERT INTO Data VALUES ('test_Tb', NULL, NULL, NULL);
INSERT INTO Data VALUES ('test_T', 1, 2, 3);
INSERT INTO Data VALUES ('test_C', 4, 5, 6);
INSERT INTO Data VALUES ('test_Mb', NULL, NULL, NULL);
INSERT INTO Data VALUES ('test_M', 7, 8, 9);

UPDATE Data AS target,
       ( SELECT * FROM Data WHERE c1 NOT LIKE '%b') AS source
   SET target.c2 = source.c2,
       target.c3 = source.c3,
       target.c4 = source.c4
 WHERE target.c1 = CONCAT(source.c1, 'b')

sqlfiddle

CREATE TABLE Data (
  c1 VARCHAR(255),
  c2 INT,
  c3 INT,
  c4 INT
);

INSERT INTO Data VALUES ('test_Tb', NULL, NULL, NULL);
INSERT INTO Data VALUES ('test_T', 1, 2, 3);
INSERT INTO Data VALUES ('test_C', 4, 5, 6);
INSERT INTO Data VALUES ('test_Mb', NULL, NULL, NULL);
INSERT INTO Data VALUES ('test_M', 7, 8, 9);

    UPDATE Data AS target
INNER JOIN Data AS source ON target.c1 = CONCAT(source.c1, 'b')
       SET target.c2 = source.c2,
           target.c3 = source.c3,
           target.c4 = source.c4
     WHERE target.c1 NOT LIKE '%b'

編輯:將 WHERE 子句更改為“target.c1 NOT LIKE '%b'”。 感謝 Barmar。

sqlfiddle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM