7
votes

Changer dans Exist dans SQL

J'ai la requête suivante: xxx

mais, je dois maintenant modifier cette requête et utiliser Existe au lieu de dans , et il devrait donner les mêmes résultats.

Mes tables ressemblent aux éléments suivants: xxx

Comment puis-je utiliser le Existe fonctionner?

sql

1 commentaires

Cela ressemble à Oracle .. Mais Pleeeeeeaseeaseeaseeaseeaseeaseeaseeaseeaseeaseease que vous utilisez !!


3 Réponses :


15
votes

Vous devez faire correspondre les deux colonnes qui seront utilisées dans le Existe ensemble: xxx

la raison pour laquelle vous devez le faire, c'est parce que Existe effectue une jointure semi-jointure sur la table et doit donc avoir une condition de jointure.


0 commentaires

4
votes

Cela le fera via une jointure intérieure directe. xxx


2 commentaires

Parfois, cela est plus rapide, parfois ce n'est pas le cas. Si Table2 est significativement plus petit que Table1 , souvent, il est souvent beaucoup plus rapide de faire existant . Obtenez le plan d'exécution pour obtenir des résultats concluants.


@ Scientifique: si "SMART" SQL Server est utilisé qu'il agira par le plan, mais si l'optimisation SQL est limitée (par exemple, sur SQLite) qu'il n'existe probablement que l'optimisation sera simplement désactivée s'il y a ou, Existe, etc. Prabic n'a pas marqué le serveur spécifique qu'il utilise.



8
votes

Modification de l'expression: xxx pré>

à un existe code> est une simple question de: p>

  1. Ajouter un où code> à la fin de l'interne Sélectionnez CODE> P>

    FROM Table1 WHERE EXISTS( SELECT * FROM Table2 WHERE Table1.a = c )
    
  2. Déplacez la colonne de correspondance externe (A) dans l'interne SELECT CODE> 'S où code> clause p>

    FROM Table1 WHERE EXISTS( SELECT * FROM Table2 WHERE a = c )
    
  3. Déplacez la colonne de correspondance interne (c) vers la clause où code>, laissant un espace porteur de colonne (une constante ou *): p>

    FROM Table1 WHERE  IN( SELECT * FROM Table2 WHERE a = c )
    
  4. Modifiez le dans code> sur Existe code>: p>

    FROM Table1 WHERE  IN( SELECT c FROM Table2 WHERE a )
    
  5. Pour être sûr, ajoutez le nom de la table sur la colonne externe: P>

    FROM Table1 WHERE a IN( SELECT c FROM Table2 WHERE )
    


0 commentaires