相当于"SELECT*FROM(SELECT table_name FROM ...)"的东西?

spr*_*aff 3 mysql sql mysql5 dynamic-sql

此查询运行,但它会生成表的名称,而不是从该表中实际选择.

SELECT T.* 
  FROM (SELECT tablename 
          FROM ListOfTables 
         WHERE id = 0) AS T
Run Code Online (Sandbox Code Playgroud)

在ListOfTables包含的地方id=0, tablename='some_table',我想返回相同的结果集,就好像我直接写了一样:

SELECT * FROM some_table
Run Code Online (Sandbox Code Playgroud)

在MySQL 5中是否有以本机方式执行此操作,或者我是否必须在应用程序中执行此操作?

And*_*eKR 5

要在MySQL中执行此操作,您需要创建一个只能从用户变量创建的预准备语句:

SELECT @tn := tablename FROM ListOfTables WHERE id = 0;

SET @qs = CONCAT('SELECT * FROM ', @tn);
PREPARE ps FROM @qs;
EXECUTE ps;
Run Code Online (Sandbox Code Playgroud)