jointure gauche de deux tables avec une condition where
C'est généralement faux pour utiliser une LEFT [OUTER] JOIN
puis filtrer avec un WHERE
condition, annulant ainsi la fonction spéciale d'un LEFT JOIN
pour inclure toutes les lignes du tableau de gauche sans condition . Explication détaillée :
- Expliquez plus en détail les suggestions de performance de la condition JOIN par rapport à LEFT JOIN et WHERE
Mettez les conditions censées filtrer toutes les lignes dans le WHERE
clause (rid = 2
), mais créez des conditions pour joindre à gauche les lignes de record_table
être des conditions de jointure réelles :
SELECT t.start_date, t.end_date -- adding those
, r.id, r.name, r.date
FROM time_table t
LEFT JOIN record_table r ON r.date >= t.start_date
AND r.date < t.end_date
WHERE t.rid = 2;
Comme indiqué, il est logique d'inclure des colonnes de time_table
dans le résultat, mais c'est mon ajout facultatif.
Vous devez également être clair sur les limites inférieures et supérieures . La convention générale est d'inclure le plus bas et exclure la borne supérieure dans le temps (timestamp
) gammes. D'où mon utilisation de >=
et <
ci-dessus.
Connexe :
- Requête SQL sur une série temporelle pour calculer la moyenne
- Sélectionner une moyenne d'enregistrements regroupés par périodes de 5 minutes
Les performances ne devraient poser pas de problème du tout avec les bons index. Vous avez besoin d'un index (ou PK) sur time_table(rid)
et un autre sur record_table(date)
.