【问题标题】:In Maria DB i can use CASE with table?在 Maria DB 中,我可以将 CASE 与表一起使用吗?
【发布时间】:2020-01-17 15:57:01
【问题描述】:

我需要在具有 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;

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

【问题讨论】:

  • 语法无效;任何查询都不允许动态表确定;不是 INSERT,不是 SELECT,也不是 UPDATE。您可以动态构造一个可以准备和执行的查询字符串;但这与以类似方式构建客户端没有太大区别。
  • 在这种情况下你需要一个动态 SQL 和变量。
  • 另外,如果您在不同的表中插入数据,数据结构通常会存在不小的差异,因此您几乎不需要语法来执行您尝试执行的操作。既然字段显然相同,为什么会有两个结构相同的不同表?也许这两个表应该合并一个新的TypeA 字段。

标签: mysql sql stored-procedures mariadb case


【解决方案1】:

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,但我相信这会比上述选项更复杂。

【讨论】:

  • 完善它的功能
  • 欢迎@carlosmoya!如果我的回答正确回答了您的问题,请点击绿色复选标志accept it...谢谢!
猜你喜欢
  • 2012-04-25
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2020-08-04
  • 2018-10-23
相关资源
最近更新 更多