如何从列值匹配的表中查找特定的列名?

时间:2016-01-08 12:24:01

标签: mysql sql sql-update

我有一个包含以下列的表格。

  1. id
  2. person1
  3. PERSON2
  4. 假设有2条记录具有值......

    id1 - 2222 - 4444  
    id2 - 3333 - 6666
    

    我想修改该值为“4444”且ID为“id1”的单元格的值

3 个答案:

答案 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;

SQL Fiddle Link

答案 2 :(得分:1)

UPDATE table
SET person2 = 'new value'
WHERE person2 = '4444' and id = 'id1'

或者,您是否想要更新所有具有特定值的单元格(此处为' 4444'),无论列是什么?