mysql - 使用 CASE WHEN 在过程外部执行 INSERT

标签 mysql mysql-workbench

当且仅当 table_1 中存在特定列时,我需要插入来自 SELECT 结果集的 table_2 值,然后该列必须从 table_1 中删除。否则什么都不会发生。

这都是关于DELIMITER吗?
据我所知,,因为代码不是过程声明的一部分。无论如何我尝试了一下,但似乎没有帮助。运行这么小的任务变得很棘手。

到目前为止,我的代码会触发来自 Workbench 的语法错误警告:

CASE
-- MysqlWorkbench complains (CASE is underlined) saying …
-- «Syntax error: 'CASE (case) is not valid input at this position'»
WHEN EXISTS (
    SELECT * FROM information_schema.`COLUMNS`
    WHERE `TABLE_SCHEMA` = 'bd_name' 
        AND `TABLE_NAME` = 'table_1' 
        AND `COLUMN_NAME` = 'name'
    ) THEN
    INSERT INTO table_2 (caption,c_id)
        SELECT DISTINCT label, c_id FROM bd_name.table_1;
    ALTER TABLE table_1 DROP COLUMN label;
    -- I'm not sure about how should I separate statements
    -- regarding https://dev.mysql.com/doc/refman/5.7/en/case.html
END;
-- ("END" is underlined) Syntax error: extraneous input found - expected end of input

谢谢。

最佳答案

我认为 MySQL 不允许在例程、触发器、事件等之外进行过程构造...解决此问题的一种方法是将代码包装在 proc 声明中,然后在其后面调用 proc 和过程的一滴。

类似这样的事情:

DELIMITER $$

CREATE PROCEDURE foo()
BEGIN
   Your stuff here;
   and here;
END$$

DELIMITER ;

CALL foo();
DROP PROCEDURE foo();

关于mysql - 使用 CASE WHEN 在过程外部执行 INSERT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45622447/

相关文章:

mysql - 更快的 InnoDB 写入?

mysql - 优化 GROUP BY 性能 - 查询时间大约增加五秒

mysql - 传输mysql Access 包括关系和外键?

mysql - 复杂的SQL查询问题(MYSQL Workbench 6.3)

JavaFX登录不同页面

mysql - 新鲜的 MySQL Workbench 安装在 Mac OSX Lion 上没有响应

mysql - 在 MySQL DB 中保存聊天消息,架构设计

php - 通过 MySQL 查询按 WordPress 用户显示名称获取帖子

java - DateTime 未使用 jsp 插入数据库

mysql - Mysql 工作台在应用时显示查询