Je viens d'apprendre (hier) à utiliser "existe" au lieu de "dans".SQL - table alias scope
BAD
select * from table where nameid in (
select nameid from othertable where otherdesc = 'SomeDesc')
GOOD
select * from table t where exists (
select nameid from othertable o where t.nameid = o.nameid and otherdesc = 'SomeDesc')
J'ai quelques questions à ce sujet:
1) L'explication que j'ai compris était: « La raison pour laquelle cela vaut mieux parce que seules les valeurs correspondantes seront retournées au lieu de construire un massif liste des résultats possibles ". Cela signifie-t-il que, bien que la première sous-requête puisse renvoyer 900 résultats, la seconde renvoie seulement 1 (oui ou non)?
2) Dans le passé, le SGBDR se plaignait: "seules les 1000 premières lignes pouvaient être récupérées", cette seconde approche résoudrait ce problème?
3) Quelle est la portée de l'alias dans la deuxième sous-requête? ... l'alias ne vit-il que dans la parenthèse?
par exemple
select * from table t where exists (
select nameid from othertable o where t.nameid = o.nameid and otherdesc = 'SomeDesc')
AND
select nameid from othertable o where t.nameid = o.nameid and otherdesc = 'SomeOtherDesc')
C'est, si j'utilise le même alias (o pour la table uneautretable) Dans le second « existe » il se présente un problème avec le premier existe? ou sont-ils totalement indépendants?
Est-ce que c'est quelque chose que Oracle est lié ou est-ce valable pour la plupart des SGBDR?
Merci beaucoup
Il est « EXISTE », non "exister". – Constantin
La deuxième requête n'analyse pas. Les textes mentionnent "le second existe" alors voulez-vous dire "ET existe" (pour ET? – philipxy