0

テーブルに格納されているテーブル名のリストがあるデータベースを作成したいと思います。このリストの助けを借りて、他のテーブルにアクセスできます。

元 :-

Table name :- table_list (2 column i.e. table_name,table_id)
table_list attributes 
authentication 1 
basic_info 2 
contact 3

selectステートメントを使用してこれらのテーブルに直接アクセスできますが、できればselectステートメントを使用してtable_listテーブルを使用してこれらのテーブルにアクセスしたいと思います。

私は試した

select * from (select table_name as x from table_list where id=2) as y

しかし、適切な出力を得ることができませんでした。

4

4 に答える 4

2

これは呼び出さPrepared Statementsれ、言及されたニーズを 1 つのリクエストで実装する場合にのみ使用されます。それ以外の場合は、プログラミング言語でテーブル名を簡単に取得し、手元のデータを使用して次のステートメントを作成できます。仕組みは次のPrepared Statementsとおりです。

SELECT table_name INTO @tbl FROM my_tables WHERE id = 1 LIMIT 1;
SET @sql := CONCAT('SELECT * FROM ', @tbl);
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
于 2013-03-17T05:24:57.620 に答える
0
TRY THIS

select * from (SELECT TABLE_NAME FROM TABLE_LIST WHERE ID=2)as y
于 2013-03-17T05:10:00.327 に答える
0

アクセスしたいテーブル名が x であることは確かなので、クエリを使用してそのようなテーブルが存在するかどうかを確認し、将来の目的のために x を使用します。

于 2013-03-17T05:13:55.123 に答える
0

テーブル名 (「識別子」) は、データベースに発行される SQL テキストの静的な部分でなければなりません。識別子は、パラメーターとして、または別の SQL クエリの結果として、「その場で」提供することはできません。

やりたいことを実行するには、2 段階のアプローチが必要です。1 つ (または複数) の SQL ステートメントを使用して必要な識別子 (テーブル名、列名など) を取得し、それを使用して 2 番目の SQL ステートメントを文字列として動的に作成できます。

識別子 (テーブル名、列番号) をパラメーターまたは「バインド変数」として指定することはできません。それらは SQL テキストの静的な部分である必要があります。

たとえば、ステートメントを生成するには、次のようにします。

SELECT CONCAT('SELECT * FROM `',table_name,'` ORDER BY 1') AS stmt
  FROM table_list
 WHERE id = 2

(コーディングの詳細は、使用している言語によって異なります。)

于 2013-03-17T05:52:41.117 に答える