代码之家  ›  专栏  ›  技术社区  ›  TheRunningDBA

如果存在,则在mysql中更新

  •  0
  • TheRunningDBA  · 技术社区  · 7 年前

    MySQL新手,需要帮助将下一个查询转换为MySQL

    If exists (select * from INFORMATION_SCHEMA.COLUMNS where table_name= 'MyTable' and column_name = 'MyColumn') 
        begin 
                update MyTable set MyColumn='' where Code=21 
        end; 
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   GMB    7 年前

    基于对您的问题发表的评论,这里有一个代码片段可以满足您的需求。它首先检查列是否存在于 INFORMATION_SCHEMA ,然后动态构建准备好的SQL查询,然后执行。如果列不存在,将执行一个虚拟查询,而不是 UPDATE . 我测试了它 this db fiddlde .

    SET @dbname = DATABASE();
    SET @tablename = "my_table";
    SET @columnname = "my_column";
    
    -- check if the column exists
    SELECT COUNT(*) INTO @cnt 
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE
        (table_name = @tablename)
        AND (table_schema = @dbname)
        AND (column_name = @columnname)
        ;
    
    -- build a dynamic SQL statement
    SET @preparedStatement = (SELECT IF(
      @cnt > 0,
      CONCAT("UPDATE ", @tablename, " SET ", @columnname, " = '' WHERE my_code = 21;"),
      "SELECT 1"
    ));
    
    -- run the statement
    PREPARE updateIfExists FROM @preparedStatement;
    EXECUTE updateIfExists;
    DEALLOCATE PREPARE updateIfExists;