mysql - MariaDB,如何使用字段名作为表名?

标签 mysql sql mariadb

我正在尝试创建一个可以引用另一个表的表,其中它引用的表是在其中一个记录中配置的:

规则表'tblRules':

    biRuleID, BIGINT, Unsigned, Primary Key
    biTableID, BIGINT, Unsigned, Link to record in 'other' table
    vcDescription, VARCHAR[64], Description of rule
    vcTableName, VARCHAR[64], The name of the table containing the rule details.

测试表,'tblTest':

    biTestID, BIGINT, Unsigned, Primary Key
    vcTest, VARCHAR[64], A test string

为了测试,tblRules 包含单个记录:

    1, 1, Testing rule, tblTest

tblTest 包含:

    1, Hello World

现在我想提取数据:

    SELECT
      * 
    FROM 
      tblRules t1 
    LEFT JOIN 
      t1.vcTableName t2 
    ON 
      t1.biTableID=t2.biTestID 
    WHERE 
      t1.biRuleID=1;

但是,当我尝试执行查询时,它似乎将 t1.vcTableName 作为表的名称,而不是 vcTableName 包含的内容,有没有办法解决这个问题?

最佳答案

您可以使用动态sql来实现它,但我认为您必须对数据库设计进行一些调整,因为这不太有效

set @qry = (
    SELECT
      concat('SELECT * FROM tblRules t1 LEFT JOIN ', t1.vcTableName, ' t2 ON t1.biTableID = t2.biTestID WHERE t1.biRuleID=1') 
    FROM 
      tblRules t1 
    WHERE 
      t1.biRuleID=1
);
PREPARE qry FROM @qry;
EXECUTE qry;
DEALLOCATE PREPARE qry;

关于mysql - MariaDB,如何使用字段名作为表名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44149950/

相关文章:

mysql - WERE IN(使用 RETURNING 子查询删除)

mysql - MariaDB/MySQL 从选择查询插入表,但重复键使用选择查询中的数据

mysql - 如何在 Dockerfile 'CMD ["mysqld"]' 之后运行脚本 shell?

mysql - 子选择还是加入?有没有更好的方法来编写这个 mysql 查询?

php - 按类别显示用户的帖子

php - 为什么这段使用 MySQLi 的代码抛出 PHP Notice : trying to get property of non-object

php - 表的有序列表

python - 使用 ""从 Python 执行 SQL

sql - 为结果表提供列名

MYSQL CAST AS DECIMAL for VARCHAR 字段