我想从另一个表中描述了表名的sql表中进行选择。
SELECT * FROM first_table t1 WHERE EXISTS (SELECT * FROM t1.other_table t2 WHERE t1.other_table_id = t2.id)
找不到解决方法!谢谢你的帮助。
sqougxex1#
可以在查询中使用动态变量:
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公司example:http://sqlfiddle.com/#!9/a787e3/1号注意:sqlfiddle不允许运行 execute 在正确的编辑器中,所以我必须使用一个视图。
execute
您应该清理tablename表的所有输入。这样就不会有人将sql插入这个表并执行它。此外,请注意,在一个真实的数据库中,我们将有一个 where 表选择查询的条件。例子:
where
set @qry1:= concat('select * from ', (select tableName from test where id='something'));
g2ieeal72#
SELECT * FROM first_table t1 WHERE EXISTS (SELECT * FROM other_table t2 WHERE t1.other_table_id = t2.id)
yqyhoc1h3#
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 应更改为只返回结果集中的一行
WHERE 1=1
3条答案
按热度按时间sqougxex1#
解决方案
可以在查询中使用动态变量:
甚至:
sqlfiddle公司example:http://sqlfiddle.com/#!9/a787e3/1号
注意:sqlfiddle不允许运行
execute
在正确的编辑器中,所以我必须使用一个视图。免责声明/注解:
您应该清理tablename表的所有输入。这样就不会有人将sql插入这个表并执行它。
此外,请注意,在一个真实的数据库中,我们将有一个
where
表选择查询的条件。例子:
g2ieeal72#
yqyhoc1h3#
在这里
WHERE 1=1
应更改为只返回结果集中的一行