0

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

前任 :-

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

4 回答 4

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;
于 2013-03-17T05:24:57.620 回答
0

表名(“标识符”)必须是发送给数据库的 SQL 文本的静态部分;标识符不能“即时”提供,无论是作为参数还是作为另一个 SQL 查询的结果。

要做你想做的事,你需要一个两步的方法。您可以使用一个(或多个)SQL 语句来获取您需要的标识符(表名、列名等),然后使用它来动态创建第二个 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 回答
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 回答