Select from subquery 子查询 
                                                    
                        
                    
                    
  
                    
                    最近遇到比较复杂的数据库查询,多处用到 select from (subquery) 类型的子查询,记录下。
SQL
SELECT COUNT(*) FROM 
    (SELECT * FROM abc WHERE col1 = xxx and col2 = xxx GROUP BY col1) AS sub 
WHERE col1 = xxx and col2 = xxx and col3 = xxx;Laravel
use Illuminate\Support\Facades\DB;
$subQuery = DB::table('abc')->where('col1', 'xxx')->where('col2', xxx)->groupBy('col1');
$query = DB::table(DB::raw("({$subQuery->toSql()}) as sub"))
    ->select(DB::raw('count(*)'))
    ->where('col1', 'xxx')
    ->where('col2', 'xxx')
    ->where('col3', 'xxx');
// 合并绑定参数
$query->mergeBindings($subQuery);
OR
$query->mergeBindings($subQuery->getQuery());
$query->get();注意合并参数时 $subQuery 必须是 \Illuminate\Database\Query\Builder 类型
如果是 \Illuminate\Database\Eloquent\Builder 类型的,用  getQuery() 方法
不用 DB::raw() 直接写子查询,是因为查询带比较多的 where 条件和 group by, 而且内层查询和外层查询的 where 基本是一样的。
本作品采用《CC 协议》,转载必须注明作者和本文链接
 
           Luff 的个人博客
 Luff 的个人博客
         
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
                     
                     
            
 
             
             
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: