Sql 当表名和列名存储在另一个表中时,如何使用JOIN?
我需要编写一个需要连接到另一个表的查询,但表名和列名都存储在另一个表中 我有两个表,如下所示: 表“说明”选项卡:(id、类型、参考id、名称、说明) 表“描述选项卡类型”:(id、类型名称、引用表、引用列名称、引用列id) 其中description_tab_type包含其他表的名称和连接所需的两列 我尝试了动态SQL:Sql 当表名和列名存储在另一个表中时,如何使用JOIN?,sql,join,Sql,Join,我需要编写一个需要连接到另一个表的查询,但表名和列名都存储在另一个表中 我有两个表,如下所示: 表“说明”选项卡:(id、类型、参考id、名称、说明) 表“描述选项卡类型”:(id、类型名称、引用表、引用列名称、引用列id) 其中description_tab_type包含其他表的名称和连接所需的两列 我尝试了动态SQL: SELECT reference_table, reference_column_name, reference_column_id INTO @reference_tab
SELECT reference_table, reference_column_name, reference_column_id
INTO @reference_table, @reference_column_name, @reference_column_id
FROM description_tab_type WHERE type_name = 'Origin';
PREPARE statement FROM "select dt.description from description_tab dt join @reference_table on @reference_table.@reference_column_id = dt.reference_id where @reference_table.@reference_column_name = 'test'";
EXECUTE statement;
DEALLOCATE PREPARE statement;
但它不起作用。当我运行它时,我得到以下信息:
您的SQL语法有错误;检查手册
对应于您的MySQL服务器版本,以便使用正确的语法
在@reference\u table上的'@reference\u table'附近。@reference\u column\u id=
dt.reference_id,其中@referee'位于第1行
有什么建议吗?我不认为MySQL会在一句话中达到你想要的效果。(实际上,我认为它超出了SQL语法) 我认为您需要分三个步骤来完成此操作:
1) Query the reference table for the table and column names you need
2) Assemble the query by concatenating it around the values you retrieved in step 1
3) Submit/Prepare the new query.
首先尝试设置变量:
set @query = concat('select dt.description from description_tab dt join ',
@reference_table, ' r ',
'on r.', @reference_column_id, ' = dt.reference_id '
'where rt.', @reference_column_name = \'test\''
);
PREPARE statement FROM @query;
EXECUTE statement;
DEALLOCATE PREPARE statement;
我不熟悉prepare语句,但请尝试以下方法:
执行('select dt.description from description_table dt join'+@reference_table+'上的'+@reference_table+'.+@reference_column_id+'=dt.reference_id,其中'+@reference_column_name+'=''test') sql字符串错误,请使用concat()。动态SQL语句是唯一的出路。