MySQL怎么实现跨库join查询
分类:书房文化作者:互联网王者 发布时间:2014-04-29 08:58:08阅读:11万+ 属地:未知
MySQL怎么实现跨库join查询
一、同节点(服务器)的不同库
只需要在表名前加上db_name
SELECT dba.arb.*,dbb.users.name FROM dba.arb left join dbb.users on dba.arb.id = dbb.users.uid
多表联查时关联的两个字段的排序规则不同会报错,改成相同即可
二、不同节点(服务器)的不同库
1.需要用 FEDERATED引擎
2.建议在程序中去多次请求处理(去join)。
laravel中跨库查询技巧:
1. 跨库查询
# 声明库名和表名即可
$a = \DB::connection('dbcon2')->table('aaa')
->where(['id'=>1])->first();
2. 跨库连表查询
跨数据库连接表查询在拼接SQL时,连接库相关必须使用\DB::raw()来声明定义,否则框架会自动在前面添加主库表前缀
$d = AModel::from('table1 as t')
->select(['t.id', \DB::raw('o.bbb'), 't.ccc',', \DB::raw('o.ddd as ggg'), \DB::raw('o.vvv')])
->leftJoin(\DB::raw('`database2`.`otable` as o'), \DB::raw('o.id'), 't.oId')
->where(['t.aaaa'=>'1111',])
->paginate(1);
跨库关联查询model的$connection属性能不起作用
我们正常的关联代码是(无法跨库):
public function address() {
return $this->belongsTo('Address', 'address_id');
}
跨数据库关联查询:
public function templates()
{
$instance = new Address ;
$instance->setTable('db2.address');
$query =$instance->newQuery();
return new BelongsTo($query,$this,'id','address_id ',null);
}
声明:本文内容版权归原作者所有,未经授权,禁止转载!
声明:本站仅提供内容存储、展示服务,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的虚假信息,谨防诈骗。如发现有害或侵权内容,可联系本站删除!