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

时间:2013-03-17 05:03:28

标签: mysql database select

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

前: -

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

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

我试过

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

但无法获得正确的输出。

4 个答案:

答案 0 :(得分:2)

它被称为Prepared Statements,它们唯一的用途是在一个请求中实现您提到的需求。否则,您可以使用编程语言轻松检索表名,并使用手中的数据创建下一个语句。以下是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;

答案 1 :(得分:0)

TRY THIS

select * from (SELECT TABLE_NAME FROM TABLE_LIST WHERE ID=2)as y

答案 2 :(得分:0)

由于您确定要访问的表名是x,因此只需使用查询检查此类表是否存在,并将x用于将来的目的。

答案 3 :(得分:0)

表名(“标识符”)必须是数据库中的SQL文本的静态部分;标识符不能“动态”提供,作为参数或来自另一个SQL查询的结果。

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

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

例如,要生成语句:

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

(编码细节取决于您使用的语言。)