我正在使用Yii2,并且需要在内部联接中使用子查询的地方使用查询生成器来转换以下原始SQL查询。
SELECT *
FROM class
INNER JOIN
(SELECT name, MAX(score) AS Maxscore
FROM class
GROUP BY name) topscore
ON class.name = topscore.name
AND class.score = topscore.maxscore;
答案 0 :(得分:0)
您应该代表您付出一些努力,因为它在这里是如此运作,但是,由于您是一只新蜜蜂,所以我要添加一个答案。很简单,请参见查询构建器guide,您需要以以下方式使用子查询
$subQuery = new \yii\db\Query();
$subQuery->select([new \yii\db\Expression('[[name]], MAX([[score]]) as Maxscore')])
->from('class')
->groupBy('[[name]]');
$query = new \yii\db\Query();
$query->select('*')
->from('class')
->innerJoin(['topscore'=>$subQuery])
->where(['=','class.[[name]]',new \yii\db\Expression('topscore.[[name]]')])
->andWhere(['=','class.[[score]]',new \yii\db\Expression('topscore.[[maxscore]]')])
->all();
注意:您没有测试它,但是它应该可以正常工作。