【发布时间】:2017-05-07 21:16:36
【问题描述】:
下面是我的纯 SQL 查询。
SELECT a.*, b.*
FROM a
INNER JOIN b
ON a.id = b.a_id
INNER JOIN (
SELECT a_id, MAX(add_time) AS max_add_time
FROM b
GROUP BY a_id
) m
ON b.a_id = m.a_id AND b.add_time = m.max_add_time
ORDER BY b.add_time DESC
我在第二个INNER JOIN 中有子查询。在我的活动查询下方。
$subQuery = B::find()->select(['a_id', 'MAX(add_time) AS max_add_time'])->groupBy('a_id');
$query = A::find()->innerJoin('b', 'a.id = b.a_id')
->innerJoin('(' .
$subQuery->prepare(Yii::$app->db->queryBuilder)
->createCommand()
->rawSql
. ') m', 'b.a_id = m.a_id AND a.add_time = m.max_add_time ')
->orderBy('b.add_time DESC');
它工作正常,但我不喜欢我在第二个INNER JOIN 中使用子查询的方式。我想用这个查询来选择左表内连接和右表,按a_id分组,按右表的add_time(DESC)排序。我应该如何更好地使用第二个 INNER JOIN 中的子查询?
【问题讨论】:
标签: sql yii2 subquery inner-join