巧用union联合查询实现对分表或相似结构表的多表操作

前言:数据库分表就是将单个数据库表进行拆分,拆分成多个数据表,然后用户访问的时候,根据一定的规则,让用户访问不同的表,这样数据分散到多个数据表中,减少了单个数据表的访问压力。提升了数据库访问性能。分表的目的就在于此,减小数据库的负担,缩短查询时间。今天使用union联合查询是实现横向分表或相似结构表(笔者的使用场景)的多表操作

场景:基于laravel。对文章,视频,图集数据的回收查询

$videos=DB::table('videos')->select([DB::raw('"videos" as table_name'),'id','title','sub_title','user_id','category_id','status','verify_status','created_at','deleted_at']);
 
$article=DB::table('articles')->select([DB::raw('"articles" as table_name'),'id','title','sub_title','user_id','category_id','status','verify_status','created_at','deleted_at']);
 
$query=DB::table('pictures')->select([DB::raw('"pictures" as table_name'),'id','title','sub_title','user_id','category_id','status','verify_status','created_at','deleted_at'])->unionAll($videos)->unionAll($article);
 
$querySql = $query->toSql();
 
$result = DB::table(DB::raw("($querySql) as r"))
            ->mergeBindings($query)
            ->orderBy('deleted_at','asc')
            ->whereNotNull('deleted_at')
            ->get();

注意点:

  • 联合查询用于将两个或更多查询的结果集组合为单个结果集,该结果集包含联合查询中所有查询的全部行。UNION的结果集列名与UNION运算符中第一个Select语句的结果集的列名相同,另一个Select语句的结果集列名将被忽略,且其他查询字段数必须和第一个相同。
  • union还是unionAll都是对两个或更多结果集进行并集的操作.但是union是将两个或更多个表的结果联合在一起,会将select语句的结果中的重复值进行压缩,也就是结果的数据并不是多条结果的条数的和。如果希望即使重复的结果也要显示出来,应该使用unionAll

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值