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

comportement de la jointure interne à l'intérieur existe sql

La différence est que lorsque vous utilisez exists - la requête à l'intérieur dépend généralement de la requête principale (ce qui signifie qu'elle utilise des colonnes et ne peut donc pas être exécutée séparément) et, ainsi, pour chaque ligne de la requête principale, elle vérifie si certaines données récupérées par la sous-requête existent ou non.

Le problème de votre première requête est que la sous-requête à l'intérieur du bloc existe ne dépend en aucun cas des colonnes de la requête principale, c'est une requête distincte qui renvoie toujours une ligne avec 1 , donc, pour toute ligne de la requête principale, le résultat de exists sera toujours true . Ainsi, votre première requête est juste équivalente à

SELECT distinct(company_id)
FROM user
WHERE user.user_id = 123 
AND user.company_id IS NOT NULL

Voir aussi violon