Mysql
 sql >> Base de données >  >> RDS >> Mysql

requête SQL au moins un de quelque chose

Pour trouver tous les utilisateurs avec au moins un post avec une note supérieure à 10, utilisez :

SELECT u.*
  FROM USERS u
 WHERE EXISTS(SELECT NULL
                FROM POSTS p
               WHERE p.user_id = u.id
                 AND p.rating > 10)

EXISTS ne se soucie pas de l'instruction SELECT qu'elle contient - vous pouvez remplacer NULL par 1/0, ce qui devrait entraîner une erreur mathématique pour la division par zéro... Mais ce ne sera pas le cas, car EXISTS ne concerne que le filtrage dans la clause WHERE.

La corrélation (le WHERE p.user_id =u.id) est la raison pour laquelle cela s'appelle une sous-requête corrélée, et ne renverra que les lignes de la table USERS où les valeurs d'id correspondent, en plus de la comparaison des notes.

EXISTS est également plus rapide, selon la situation, car il renvoie vrai dès que les critères sont remplis - les doublons n'ont pas d'importance.