0

我可以使用 MySQL 函数或过程返回可在查询中使用的表名吗?

就像是

SELECT * FROM get_db_table_name(2342352412);

whereget_db_table_name()是一个用户定义的函数,它接受 auser_id作为参数并返回该用户所在的 db.table。我无法这样做,因为 MySQL 抱怨语法(我的猜测是因为我必须为函数定义一个返回类型,我尝试过VARCHAR(30)它是错误的或不可能的)。那么,这可能吗?

故事是我有一些数据库,它们本质上是分片。让我们称它们user_1为 ,user_2等。

我也有一个表,比如包含emails来自user_id表 s等的记录。user_1.usersuser_2.users

因为我知道一种通过查看 id 来计算 id 来自哪个表的方法,所以我只想要一个可以接受输入并返回要使用的 db.table 名称的函数。

谢谢!

PS 我想使用上面的 SELECT 查询作为 VIEW 定义,通过在正确的表上执行 JOIN 将用户名从正确的 db/table 中获取。

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

参数化表名通常被认为是由于糟糕的数据库设计。真的不可能将所有相同类型的实体(在本例中为您的用户)放在一个表中吗?

于 2010-02-11T22:48:08.337 回答