我想创建一个数据库,其中有一个存储在表中的表名列表。现在借助这个列表,我可以访问其他表格。
前: -
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
但无法获得正确的输出。
答案 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
(编码细节取决于您使用的语言。)