繁体   English   中英

sql从列中描述的表名称中选择

[英]sql select from table name described in a column

我想从一个具有另一个表中描述的表名的sql表中选择。

SELECT * 
FROM first_table t1 
WHERE EXISTS (SELECT * FROM t1.other_table t2 WHERE t1.other_table_id = t2.id)

找不到解决方案!

感谢任何帮助。

您可以在查询中使用动态变量:

SET @table := (select tableName from test limit 1);
set @qry1:= concat('select * from ',@table);
prepare stmt from @qry1 ;
execute stmt ;

甚至

set @qry1:= concat('select * from ', (select tableName from test limit 1));
select @qry1;
prepare stmt from @qry1 ;
execute stmt ;

SQLFiddle示例: http ://sqlfiddle.com/#!9/a787e3/1

注意:SqlFiddle不允许在右编辑器中运行execute ,因此我不得不使用视图。

免责声明/说明:

您应该清除tableName表的所有输入。 这样一来,没人会在该表中插入SQL并执行它。

此外,请注意,在真实数据库中,表选择查询将具有where条件。

例:

set @qry1:= concat('select * from ', (select tableName from test where id='something'));
  SELECT * 
   FROM first_table t1 
    WHERE EXISTS (SELECT * FROM other_table t2 WHERE t1.other_table_id = t2.id)
mysql> SELECT @other_table := other_table FROM first_table WHERE 1 = 1;
mysql> SET @s = CONCAT("SELECT * FROM ", @other_table);
mysql> PREPARE stmt FROM @s;
mysql> EXECUTE stmt;
mysql> DEALLOCATE stmt;

在这里应该将WHERE 1=1更改为仅返回结果集中的一行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM