MariaDB在选择查询中计算表引用



我有一个非常愚蠢的客户端应用程序,它希望基于参数从MariaDB获取信息。此参数是一个包含空格的字符串,如"valid parameter"。在MariaDB中,每个可能的字符串值都有一个表,表名是用下划线替换空格并添加前缀后的字符串值。所以我可以像这样进行必要的转换:

SELECT CONCAT('prefix_', REPLACE('valid parameter',' ','_'));

现在结果"prefix_valid_parameter"就是要查询的表,所以实际上我需要启动

SELECT * from CONCAT('prefix_', REPLACE('valid parameter',' ','_'));

但MariaDB以回应

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '('prefix_', REPLACE('valid parameter',' ','_'))' at line 1

我本来期望表'prefix_valid_parameter'的内容或一个错误陈述";表'prefix_valid_parameter'未找到";。如何使SQL SELECT语句的table_reference部分成为动态的?

您需要使用动态SQL:

set @sql = 'select * from [table]';
execute immediate replace(@sql, '[table]',
concat('prefix_', replace('valid parameter', ' ', '_'))
);

我应该补充一点,这样做的必要性可能表明您的数据模型存在缺陷。如果表具有相同的结构,最好将所有行放在一个表中。

最新更新