Sous-requêtes, alias et Minus avec MySQL

Chaque SGBDR (Système de Gestion de Bases de Données Relationnelles) interprète le SQL un peu comme ça lui chante. Et MySQL n’échappe pas à la règle. Il y a peu,  je me suis retrouvé confronté au problème suivant : comment effectuer une sélection d’enregistrements à laquelle je viens en soustraire d’autres. Facile, je me suis dit sur le coup. Faisons appel aux opérateurs MINUS ou EXCEPT. Ben oui, sauf que ceux-ci ne sont pas disponibles dans MySQL. Alors comment qu’on fait ?

Les requêtes SQL, c’est avant tout du sport

Histoire d’être plus clair dans mes explications, prenons un cas concret. Dans le cadre d’un tournoi de sport, plusieurs équipes s’affrontent lors de matchs. Avant les 1/4 de finale, les perdants sont définitivement éliminés.

Au niveau des 1/4 de finale, on constitue une poule principale. A partir de là, toutes les équipes gagnantes continuent le tournoi dans cette poule principale alors que les équipes perdantes du 1/4 de finale sont repêchées dans une poule secondaire.

Au classement de la poule principale, ne figurent que les équipes gagnantes au 1/4 de finale. De là, pour établir celui-ci, je dois sélectionner toutes les équipes de la poule principale et exclure de ma sélection, les équipes de la poule secondaire.

NOT IN à la place de MINUS et de EXCEPT

Formtion SQL

Comme les opérateurs MINUS ET EXCEPT ne sont pas reconnus par MySQL, on va contourner le problème avec l’opérateur NOT IN de la manière suivante :

$query = « SELECT team FROM (
//Sélection de toutes les équipes dans la poule principale
SELECT DISTINCT team FROM tbl_matchs AS A WHERE poule = ‘principale’) AS B WHERE team NOT IN (
//Exclusion des équipes de la poule secondaire
SELECT DISTINCT team  FROM tbl_matchs AS C WHERE poule =  ‘secondaire);

Vous remarquerez l’utilisation d’alias pour les tables, la requête et les sous-requêtes avec l’instruction AS. Si vous n’utilisez pas d’alias, votre requête de sélection ne pourra aboutir et MySQL vous retournera le message d’erreur suivant : Every derived table must have its own alias.

Vous l’aurez compris, on fait une sélection dans une table qui a pour champs : team, poule, score, etc…

Il ne vous reste plus qu’à rapporter cet exemple de requête SQL à vos cas pratiques.

Sous-requêtes, alias et Minus avec MySQL
Votez pour ce billet !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *