MySQL Sélection de lignes non présentes dans une autre table
Pour obtenir toutes les lignes qui existent dans la table A mais pas dans la table B tout en partageant le primaire commun clés, quelques méthodes sont disponibles, avec des implications variables en termes de performances.
Utilisation d'une sous-requête avec NOT EXISTS :
Votre approche initiale avec une sous-requête utilisant NOT EXISTS est une solution viable. option, mais peut être relativement lente, en particulier avec des ensembles de données plus volumineux.
Utilisation d'une jointure à gauche :
Comme vous l'avez découvert, une jointure à gauche peut être plus rapide. Lorsque vous joignez le tableau A au tableau B sur la colonne partagée, les lignes du tableau A qui ne correspondent à aucune ligne du tableau B auront des valeurs NULL dans la colonne de jointure. Le filtrage de ces valeurs NULL isole efficacement les lignes souhaitées.
Exemple de code :
<code class="sql">SELECT * FROM A LEFT JOIN B ON A.x = B.y WHERE B.y IS NULL;</code>
Conseils supplémentaires :
Conclusion générale :
Bien que la méthode de jointure gauche surpasse généralement l'approche de sous-requête, la solution optimale peut varier en fonction de l’ensemble de données et le schéma spécifiques. L'expérimentation et les tests de performances sont recommandés pour déterminer l'approche la plus efficace dans chaque situation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!