De voorbeeldquery gebruikt vanuit SQL-perspectief een "gecorreleerde subquery" in de select-clausule en vaak is dit een zeer inefficiënte manier om een query te vormen.
SELECT ParentTable.*, (SELECT MAX(ChildTable.NumberField)
FROM ChildTable
WHERE ChildTable.FK_Id = ParentTable.Id)
FROM ParentTable
Hoewel het op het eerste gezicht misschien ingewikkelder en dus minder efficiënt lijkt, is het voor de prestaties over het algemeen beter om "gecorreleerde subquery's" in een select-clausule te vermijden en in plaats daarvan een "afgeleide tabel" te gebruiken, zoals deze:
SELECT ParentTable.*,c.MxNum
FROM ParentTable
LEFT JOIN (
SELECT ChildTable.FK_Id, MAX(ChildTable.NumberField) as MxNum FROM ChildTable
GROUP BY ChildTable.FK_Id
) AS c ON c.FK_Id = ParentTable.Id
Let op:een gecorreleerde subquery met een select-clausule kan NULL retourneren, en als gevolg hiervan is het equivalente join-type, als ze worden vervangen door een afgeleide tabel, een LEFT OUTER JOIN (of gewoon LEFT JOIN), omdat dit ook een NULL-resultaat toestaat. Als u echter geen NULL's voor de kolom nodig heeft, gebruikt u in plaats daarvan de efficiëntere INNER JOIN.
Bij voorbaat excuses voor het niet kennen van de Yii2-syntaxis, maar het lijkt relevant om een effectieve alternatieve benadering te kennen die kan helpen bij het oplossen van het probleem.