Comment puis-je transformer cette sous-requête dans un code> rejoindre code>?
J'ai lu que les sous-requêtes sont plus lentes que joindre code> s. P> SELECT
reklamation.id,
reklamation.titel,
(
SELECT reklamation_status.status
FROM reklamation_status
WHERE reklamation_status.id_reklamation = reklamation.id
ORDER BY reklamation_status.id DESC
LIMIT 1
) as status
FROM reklamation
WHERE reklamation.aktiv=1
3 Réponses :
Utilisation de Rejoindre code> La requête peut être réécrite à:
Cela devrait le faire:
SELECT r.id, r.titel, MAX(s.id) as status FROM reklamation r LEFT JOIN reklamation_status s ON s.id_reklamation = r.id WHERE r.aktiv = 1 GROUP BY r.id, r.titel
Ce que vous lisez est incorrect. Les sous-requêtes peuvent être plus lentes, plus rapides ou identiques que des jointures. J'écrirais la requête comme suit: pour la performance, vous souhaitez un index sur Le chemin, c'est un cas où la sous-requête est probablement la méthode la plus rapide d'exprimer cette requête. Si vous essayez un reklamation_status (ID_Reklamation, ID, Status) CODE>. P> rejoindre code>, vous avez besoin d'une sorte d'agrégation pour obtenir le statut le plus récent. Cela peut être coûteux. P> p>