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;
我正在尝试创建一个可以引用另一个 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;