Sql 当表名和列名存储在另一个表中时,如何使用JOIN?

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

我需要编写一个需要连接到另一个表的查询,但表名和列名都存储在另一个表中

我有两个表,如下所示:

表“说明”选项卡:(id、类型、参考id、名称、说明)

表“描述选项卡类型”:(id、类型名称、引用表、引用列名称、引用列id)

其中description_tab_type包含其他表的名称和连接所需的两列

我尝试了动态SQL:

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语句是唯一的出路。