我需要使用Laravel Query Builder创建以下查询:
SELECT count(*) FROM table WHERE 1 < (SELECT count(*) FROM x WHERE y=2)
问题是 - 是否可以使用查询构建器来完成它?
我能够实现它的唯一原因是:
\DB::table('table')->whereRaw('1 < (SELECT count(*) FROM x WHERE y=2)')->count();
但是这样我需要手动放置子查询并且它生成错误的查询:
SELECT count(*) FROM table WHERE 1 < (SELECT count(*) FROM x WHERE y=2) IS NULL
(最后添加is null
)
是否可以在此处使用查询构建器进行子查询并使其生成正确的SQL?
答案 0 :(得分:1)
我找到的唯一解决方案是以这种方式创建单独的查询构建器:
$subQuery = \DB::table('x')->selectRaw('count(*)')->where('y',2);
\DB::table('table')->whereRaw('1 < ('.$subQuery->toSql().')')->addBinding($subQuery->getBindings());
答案 1 :(得分:0)
试试这个
\DB::table('table')->where(DB::raw('SELECT count(*) FROM x WHERE y=2'), '<',1)->count();