0

MySQL 関数またはプロシージャを使用して、クエリで使用できるテーブル名を返すことはできますか?

何かのようなもの

SELECT * FROM get_db_table_name(2342352412);

whereは、パラメータとして a を受け入れ、そのユーザーが存在する db.table を返すget_db_table_name()ユーザー定義関数です。user_idMySQL が構文に不満を持っているため、この方法でこれを行うことができませんでした (私の推測では、関数の戻り値の型を定義する必要がVARCHAR(30)ありましたが、それは間違っているか不可能でした)。それで、これは可能ですか?

話は、本質的にシャードであるデータベースがいくつかあるということです。user_1それらを 、user_2、などと呼びましょう。

また、 tableなどの s をemails持つレコードを含む単一のテーブルもあります。user_iduser_1.usersuser_2.users

ID を見るだけで ID がどのテーブルからのものかを計算する方法を知っているので、入力を受け入れて db.table 名を返す関数を使用したいだけです。

ありがとうございました!

PS上記のSELECTクエリを、適切なテーブルでJOINを実行することにより、適切なdb /テーブルからユーザーの名前を取得するVIEW定義として使用したいと思います。

4

3 に答える 3

2

これには、次のような準備済みステートメントを使用できます。

....
SET @tbl = 'nameofmytable';
SET @sql = CONCAT( 'SELECT * FROM ', @tbl );
EXECUTE @sql;
...
于 2009-08-28T07:01:14.683 に答える
0
于 2009-08-28T07:18:13.790 に答える
0

テーブル名のパラメータ化は、通常、データベースの設計が悪いためと考えられています。同じタイプのすべてのエンティティ (この場合はユーザー) を 1 つのテーブルに格納することは本当に不可能なのでしょうか?

于 2010-02-11T22:48:08.337 に答える