0

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

我有两个表,如下所示:

表“description_tab”:(id、type_id、reference_id、name、description)

表“description_tab_type”:(id、type_name、reference_table、reference_column_name、reference_column_id)

其中 description_tab_type 包含其他表的名称和我需要用于 JOIN 的两列。

我尝试了动态 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 服务器版本相对应的手册,以在第 1 行的 '@reference_table on @reference_table.@reference_column_id = dt.reference_id where @refere' 附近使用正确的语法

有什么建议么 ?

4

3 回答 3

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.
于 2013-07-07T23:33:18.323 回答
1

首先尝试设置变量:

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;
于 2013-07-07T23:38:38.450 回答
0

我不熟悉准备语句,但试试这个:

执行 ('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 + ' = ''测试''');

于 2013-07-07T23:56:56.067 回答