请教怎么写跨库查询的SQL语句
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教怎么写跨库查询的SQL语句相关的知识,希望对你有一定的参考价值。
比如有10个数据库,每个有10张表,一共100张表,这些表的结构都是一模一样的,现在我想查出name=‘张三’的所有行,改怎么写?
建议写个视图,直接查询多个数据库,速度很成问题的,你可以这样
create view V_Select
(
@name nvarchar(20)
)
as
begin
select a.* from
(
select * from 数据库名.dbo.table1
union all
select * from 数据库名.dbo.table2
.....
)a
where isnull(@name,'')='' or name='张三'
end
说明一下:
因为你要查询10个数据库的表,必须这10个数据库你都可以在此数据库访问的到,这是基本条件
我连接每个表的数据是用union all,这是所有数据均包含,如果你要去掉重复数据,就用union
不明白,就接着问,OK,请采纳
追问有没有更快的方法,这样的确可行,但是我上面说的只是举例子,实际上数据库和表的数量远远多于我说的,我查了2个数据库就花了6分钟……
追答你把每个用到的表,全用视图代替,然后我给你写的视图中,把表名替换掉,可以一定程度上加快查询速度
另外一个方法,就是用定时任务来每天把查到的数据导入一个表,这样很快,不过,不能实时更新
请教大神thinkphp5 怎么打印sql语句
你好,一共有两种方法可以打印sql语句,具体实现方法可参照这篇文章:
ThinkPHP5打印sql语句
[ SQL ] SHOW COLUMNS FROM `think_action` [ RunTime:0.001339s ][ EXPLAIN : array ( 'id' => '1', 'select_type' => 'SIMPLE', 'table' => 'think_action', 'partitions' => NULL, 'type' => 'ALL', 'possible_keys' => NULL, 'key' => NULL, 'key_len' => NULL, 'ref' => NULL, 'rows' => '82', 'filtered' => '100.00', 'extra' => NULL, ) ]
[ SQL ] SELECT * FROM `think_action` LIMIT 1 [ RunTime:0.000539s ] 参考技术A $User = M("User"); // 实例化User象
$User->find(1);
echo $User->getLastSql();
// 3.2版本使用简化
echo $User->_sql();
输结 SELECT * FROM think_user WHERE id = 1
并且每模型都使用独立SQL记录互干扰用空模型getLastSql获取全局SQL记录本回答被提问者采纳 参考技术B fetchsql(ture) 这个没有变化和tp3的一样
$list = db('user')->where($map)->fetchsql(true)->select();
var_dump($list);
以上是关于请教怎么写跨库查询的SQL语句的主要内容,如果未能解决你的问题,请参考以下文章