问题是在第二个INNER JOIN上实现嵌套查询:
SELECT a, b, c
FROM t1
INNER JOIN t2 ON t2.b = t1.b
INNER JOIN (
SELECT a, max(c) AS d FROM t3 GROUP BY a
) AS t3 ON ( t3.a = t1.a AND t3.d = t1.c )
我在join()函数的闭包上尝试了很多测试,但它似乎只适用于嵌套的地方。
我发现on SO我的SQL命令可以用其他表单编写,更容易用查询构建器编写,但不那么简单。所以我想知道上面的SQL查询是否仍然可以用Laravel4的Query Builder编写。
答案 0 :(得分:1)
这很有趣。
$products = DB::table('t1')
->select('a', 'b', 'c')
->join('t2', 't2.b', '=', 't1.b')
->join(DB::raw('(SELECT a, max(c) AS d FROM "articles" GROUP BY a) AS t3'), function($join)
{
$join->on('t3.a', '=', 't1.a');
$join->on('t3.d', '=', 't1.c');
})
->toSql();
echo $products;
它正在为我正确输出,但在你加入t3的内容中加入了一些括号。我不认为它对你有任何影响。您可能需要将"articles"
更改为articles
,因为我认为这不会正常工作。