首页 > 解决方案 > 表名中的 MySQL 临时变量

问题描述

我有一系列具有相同前缀的表,我需要从最新版本中选择数据——其后缀具有最高的数字。这是我所拥有的:

SELECT
    @latest_version_number :=
    MAX(
        CAST(SUBSTRING_INDEX(table_name,'_',-1) AS UNSIGNED)
    )
FROM information_schema.tables
WHERE lower(table_name) like '{table_prefix}%';

SELECT
    *
FROM CONCAT('`{table_prefix}', CAST(@latest_version_number AS CHAR), '`')

在控制台中作为 2 个单独的查询运行时,它的行为与我预期的一样。但是我尝试将其作为单个查询运行时遇到“语法错误”。将其重构为单个查询的最简洁方法是什么?谢谢

标签: mysqlsqlcommon-table-expression

解决方案


我知道您可以在 MySQL 的表名中使用变量的唯一方法是使用准备 + 执行语句。

这是我在网上找到的一个示例,它为您提供了确切的说明。

https://www.tutorialspoint.com/set-user-defined-variable-with-table-name-in-mysql-prepare-statement


推荐阅读