我有一个包含以下列的表格。
假设有2条记录具有值......
id1 - 2222 - 4444
id2 - 3333 - 6666
我想修改该值为“4444”且ID为“id1”的单元格的值
答案 0 :(得分:3)
您只能使用case
表达式更新相应的列:
UPDATE mytable
SET person1 = CASE person1 WHEN '4444' THEN 'new value' ELSE person1 END,
person2 = CASE person2 WHEN '4444' THEN 'new value' ELSE person2 END
WHERE id = 'id1' AND
'4444' IN (person1, person2)
答案 1 :(得分:2)
@Mureinik给出了答案。但是当您要求其他49列如何进行此查询时,您可以准备动态查询然后执行它。以下是@Mureinik提到的但是动态创建的查询:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(UN.column_name, ' = CASE ', UN.column_name,' WHEN ''4444'' THEN ''1111'' ELSE ', UN.column_name,' END'))
INTO @sql
FROM (
SELECT table_name, column_name
FROM INFORMATION_SCHEMA.COLUMNS
where table_name = 'MyTable'
AND column_name like 'person%') UN;
SET @sql = CONCAT('UPDATE mytable SET ', @sql, ' WHERE id = ''id1''');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
答案 2 :(得分:1)
UPDATE table
SET person2 = 'new value'
WHERE person2 = '4444' and id = 'id1'
或者,您是否想要更新所有具有特定值的单元格(此处为' 4444'),无论列是什么?