我正在尝试创建一个可以引用另一个表的表,其中它引用的表是在其中一个记录中配置的:
规则表'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/