MariaDB,如何使用字段名称作为 table 名称?

MariaDB, how to use a field name as a table name?

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

规则table'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.

测试table,'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 作为 table 的名称,而不是 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;