【发布时间】:2017-05-24 14:15:18
【问题描述】:
我正在尝试创建一个可以引用另一个表的表,它所引用的表在其中一条记录中配置:
规则表'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 包含的内容,有没有办法解决这个问题?
【问题讨论】:
-
我不是 MariaDB 用户,但通常这件事(使用查询本身的列中的值)在 SQL 中是不可能的(实际上可能违反 SQL 标准)。您需要以某种方式获取元数据,或者使用 SQL 之上的语言,或者使用 EXECUTE IMMEDIATE 动态生成和执行 SQL 语句。
-
这种问题是设计不佳的表现
-
我的目标是完全的灵活性和可扩展性