0

別のテーブルへの結合を必要とするクエリを作成する必要がありますが、テーブル名と列名の両方が別のテーブルに格納されています。

以下にリストされている2つのテーブルがあります。

テーブル "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 に必要な 2 つの列が含まれています。

動的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

最初に変数を設定してみてください。

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 に答える
1

MySQL が 1 つのステートメントで必要なことを実行するとは思いません。(実際には、SQL 構文の外側にあると思います)。

次の 3 つの手順でこれを行う必要があると思います。

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 に答える