Mysql 从表中获取表名并使用表名访问数据

Mysql 从表中获取表名并使用表名访问数据,mysql,database,select,Mysql,Database,Select,我想创建一个数据库,其中有一个存储在表中的表名列表。现在,在这个列表的帮助下,我可以访问其他表 例:- 我可以使用select语句直接访问这些表,但我希望使用table_list表访问它们,最好使用select语句 我试过了 select * from (select table_name as x from table_list where id=2) as y 但是无法获得正确的输出。因为您确定要访问的表名是x,所以只需使用查询检查此类表是否存在,并使用x以备将来使用 它被调用,它们的唯一

我想创建一个数据库,其中有一个存储在表中的表名列表。现在,在这个列表的帮助下,我可以访问其他表

例:-

我可以使用select语句直接访问这些表,但我希望使用table_list表访问它们,最好使用select语句

我试过了

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

但是无法获得正确的输出。

因为您确定要访问的表名是x,所以只需使用查询检查此类表是否存在,并使用x以备将来使用

它被调用,它们的唯一用途是当您希望在一个请求中实现您提到的需求时。否则,您可以用编程语言轻松检索表名,并使用手头的数据创建下一条语句。以下是
准备好的语句的工作原理:

TRY THIS

select * from (SELECT TABLE_NAME FROM TABLE_LIST WHERE ID=2)as y
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;
表名(“标识符”)必须是数据库中SQL文本的静态部分;标识符不能作为参数或另一个SQL查询的结果“动态”提供

要做你想做的事情,你需要一个两步的方法。您可以使用一个(或多个)SQL语句来获取所需的标识符(表名、列名等),然后使用该标识符动态创建第二个SQL语句(作为字符串)

标识符(表名、列名称)不能作为参数或“绑定变量”提供,它们必须是SQL文本的静态部分

例如,要生成语句,请执行以下操作:

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

(编码详细信息取决于您使用的语言。)

您想实现什么?将表名存储在另一个表中有什么意义。如果出于安全目的,您可以创建视图并为用户提供有限的访问权限。对于我的项目,我已经创建了视图。但我想实现一些动态方法来从各种表中检索数据。此外,此方法还可以提供安全性,这是一个优点。此语句将从
表格列表中的
表格名称
列返回值。这与OP发布的查询有什么不同?对不起,我没有时间测试它。你说得对,它不起作用。我现在已经更新了它,所以它可以工作了。感谢您指出这一点。
从getname选择getname.tbnm进入@tbl,其中getname.id=1限制1;SET@sql:=CONCAT('SELECT*FROM',@tbl);从@sql准备stmt1;执行stmt1
@Mehran我试过你的give声明,除了最后一次
DEALLOCATE PREPARE stmt1
解除分配的问题是什么?我自己试过了,效果很好!也许你的问题更像它的作用?在这种情况下,我必须说它删除了先前创建的
Prepared语句
,当您不再需要使用该语句时,需要调用它。除此之外,我不知道解除分配会出什么问题!
SELECT CONCAT('SELECT * FROM `',table_name,'` ORDER BY 1') AS stmt
  FROM table_list
 WHERE id = 2