作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个 SQL 语句必须从两个数据库中提取信息,一个是常量已知数据库,另一个是在第一个数据库中动态找到的。数据库结构如下所示:
所以我的 SQL 语句是这样的:
SELECT
test.key as key,
test.database_name as database_name,
bar.important1 as important1,
bar.importnat2 as important2,
FROM
lookup.test as test,
(database_name).bar as bar, # this, obviously, doesn't work
WHERE
key = 'foo'
LIMIT 1;
有没有办法让我完成这项工作,还是我只执行两个单独的 SQL 语句更好,一个用于查找,一个用于数据库?
最佳答案
如果您必须这样做,那么您需要使用动态 sql 和两个语句。
您将查询构建为字符串,然后在构建查询后对查询运行 EXEC
。
在这种情况下,您将有一个数据库名称的字符串变量,然后您将从该变量和您的文字查询创建一个查询,然后您只需执行它。
但是请注意,如果您不控制输入参数,这会使您容易受到 SQL 注入(inject)攻击。
Erland Sommarskog 有一本关于使用动态 SQL 的入门读物:
http://www.sommarskog.se/dynamic_sql.html
编辑:根据下面@BryanMoyle 的评论,您可能需要执行单独的查询和 动态sql。您需要提取该值以确定其他数据库名称...因为您不能将数据库名称用作变量,否则您需要先SELECT
此信息,然后将其粘贴到后续查询。
关于php - SELECT FROM 以 JOIN 中的值命名的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16613900/
我是一名优秀的程序员,十分优秀!