mysql - 在 Maria DB 中,我可以将 CASE 与表一起使用吗?

标签 mysql sql stored-procedures mariadb case

我需要在具有 CASE 条件的两个表之间的存储过程中进行选择。

CREATE PROCEDURE PRO (...., TypeA TINYTEXT)
BEGIN
....
INSERT INTO
CASE TypeA
WHEN ValueA THEN `database`.`TableA`
WHEN ValueB THEN `database`.`TableB`
END
(`ColumnA`, `ColumnB`, `ColumnC`) VALUES (....);
END
...

...
END;

但它告诉我在这种情况下存在语法错误。 我哪里错了?

最佳答案

CASE syntax不能用于选择要INSERT(或UPDATE,或SELECT)的表。

解决方案是将 CASE 移到查询之外,例如:

CASE TypeA
    WHEN 'ValueA' THEN INSERT INTO `database`.`TableA` (`ColumnA`, `ColumnB`, `ColumnC`) VALUES (....);
    WHEN 'ValueB' THEN INSERT INTO `database`.`TableB` (`ColumnA`, `ColumnB`, `ColumnC`) VALUES (....);
END CASE

这也可以用 IF syntax 来完成.

另一种选择是使用动态 SQL,但我认为这会比上述选项更复杂。

关于mysql - 在 Maria DB 中,我可以将 CASE 与表一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57963179/

相关文章:

javascript - 如何在 MySQL 中安全地存储 HTML 数据?

mysql - 如果计数值为空,则将其设置为零 - sql select 语句

mysql - 如何根据mysql中的最高值合并输出

sql - 有没有办法在 Interbase firebird 的一个选择过程中拥有两个不同的 where 子句?

sql - 根据条件获取列的总和

mysql - 在 MySQL 中将 VARBINARY 转换为 Base64

MySQL - 如何从动态查询中获取字段值?

javascript - 通过复杂类型 cosmosDB azure 的存储过程进行批量更新

mysql - 使用 MySQL : how does it work? 对组中的行进行编号

java - 使用存储过程中存储 View