请教怎么写跨库查询的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分钟……

追答

你把每个用到的表,全用视图代替,然后我给你写的视图中,把表名替换掉,可以一定程度上加快查询速度
另外一个方法,就是用定时任务来每天把查到的数据导入一个表,这样很快,不过,不能实时更新

参考技术A 没有办法一次性把所有库都查一遍,你只能一个库一条语句的写 参考技术B 数据库不一样建立的连接就不一样,你可以一个一个数据库查下组合到一起吗.如果表明都一样的话可以在建立数据库连接来个for循环吗

请教大神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语句的主要内容,如果未能解决你的问题,请参考以下文章

Oracle数据库怎样跨库查询?

sql 跨库查询的问题

sql server 跨库查询

SQL Server跨库查询

SQL 跨库查询

SQL 使用openquery进行跨库操作