S'il s'agit d'une dupe, je m'excuse. Je ne pouvais pas le trouver.
J'ai cette requête convoluée qui frappe 3 tables, et j'ai besoin de comprendre comment exclure tout un résultat si le accepter également l'entrée sur la vitesse / l'élégance de la requête globale. P> P> group_concat code> comme
indique code> > retourne null (ce qu'il fait souvent). Pour clarifier, si
montre code> apparaît
null code>, je ne veux pas que les données code> profil code> pour ce résultat non plus. Je veux que la ligne entière a sauté. P>
3 Réponses :
probablement il y a un moyen plus efficace de le faire, mais je pense qu'une simple clause où la clause fera l'affaire.
Vous ne pouvez utiliser que des alias de colonnes dans le groupe par, commander ou avoir des clauses, de sorte que où ... montre ... b> ne fonctionnera pas dev.mysql.com/doc/refman/8.0/fr/problems-with-alias.html
Salut @nacho, es-tu sûr? il me joint que la requête n'utilise que le groupe par une sous-requête
Oui, il n'utilise qu'un groupe par la sous-requête. Ce que j'essaie de dire, c'est que vous ne pouvez pas utiliser d'alias (spectacle est un alias) dans une clause où "standard SQL désalcule des références aux alias de colonne dans une clause où la clause de la colonne. Cette restriction est imposée parce que lorsque la clause de l'endroit est évaluée , la valeur de la colonne n'a pas encore été déterminée b>
Vous pouvez ajouter une clause:
SELECT `profiles`.*, IF( `profiles`.`profile_id` IN( SELECT DISTINCT (`badges`.`profile_id`) FROM `badges` ), TRUE, FALSE ) AS `has_registrations`, (SELECT GROUP_CONCAT( DISTINCT `shows`.`show_name` SEPARATOR '<br>' ) FROM `shows` LEFT JOIN `badges` ON `badges`.`show_id` = `shows`.`show_id` WHERE `badges`.`profile_id` = `profiles`.`profile_id` AND `shows`.`end_date` >= CURDATE() ) AS `shows` FROM `profiles` having shows is not null
Si je comprends bien les questions correctement, vous n'avez pas besoin de valeurs nulles. Peut-être que la valeur nulle a lieu à l'usage de la join gauche, pourquoi n'essayez-vous pas avec une jointure intérieure que leur ne sera pas une valeur null. P>