Maison >base de données >tutoriel mysql >Comment sélectionner efficacement les lignes du tableau A qui ne figurent pas dans le tableau B ?

Comment sélectionner efficacement les lignes du tableau A qui ne figurent pas dans le tableau B ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-26 06:02:30681parcourir

 How to Efficiently Select Rows from Table A that are Not in Table B?

Sélectionner efficacement les lignes du tableau A exclues du tableau B

Lorsqu'il s'agit de deux tables (A et B) partageant les mêmes clés primaires, une tâche courante consiste à extraire toutes les lignes présentes dans A mais pas dans B. Les solutions existantes, telles que l'utilisation de la clause "NOT EXISTS", peuvent présenter des problèmes de performances.

Pour améliorer l'efficacité, il est recommandé d'utiliser un approche de jointure à gauche. La syntaxe d'une solution basée sur la jointure gauche est la suivante :

SELECT *
FROM A
LEFT JOIN B ON A.x = B.y
WHERE B.y IS NULL;

Cette approche compare chaque ligne du tableau A avec sa ligne correspondante dans le tableau B en les joignant en fonction du champ commun "x" (en supposant ça existe). Les lignes du tableau A qui n'ont pas de ligne correspondante dans le tableau B seront renvoyées car la clause "WHERE" filtre les lignes où "B.y" est NULL, ce qui indique une correspondance manquante.

Alternativement, la syntaxe suivante peut être utilisé pour obtenir le même résultat :

SELECT A.*
FROM A
LEFT JOIN B ON A.x = B.y
WHERE B.y IS NULL;

Cette syntaxe sélectionne explicitement uniquement les colonnes du tableau A, garantissant qu'aucune donnée inutile n'est récupérée.

En général, l'approche de jointure à gauche est un moyen plus efficace d'effectuer l'opération "sélectionner là où il n'est pas dans le tableau" par rapport à la clause "NOT EXISTS". Bien que l'amélioration spécifique des performances puisse varier en fonction de la taille et de la structure des données, la jointure gauche a tendance à surpasser l'alternative, en particulier lorsque le nombre de lignes du tableau B est nettement inférieur à celui du tableau A.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn