12
votes

n'existe pas dans la même table

Je souhaite sélectionner les tests exécutés sur IE7 et non exécutés sur IE8. J'ai essayé cela mais je reçois 0 et ce n'est pas vrai. XXX

Merci!

sql

0 commentaires

5 Réponses :


14
votes

Vous voulez probablement dire: xxx

(mon transact-sql est un peu rouillé, mais je pense que c'est comme ça que c'est fait. L'important est que vous disiez "je veux tout Test_names avec la version 'IE7' et qu'aucune ligne n'existe dans la base de données du tout avec la version 'IE8' ":))


0 commentaires

9
votes

Essayez ceci xxx


1 commentaires

Ne doit pas être évité autant que possible.



5
votes

Vous manquez une condition sur la sous-requête pour correspondre aux lignes vers la sélection extérieure E.g.: XXX


0 commentaires

8
votes

Ceci est une forme plus optimale de la requête correcte:

 SELECT tests.test_name
 FROM tests
 LEFT JOIN tests AS tests2 ON tests.test_name = tests2.test_name
     AND tests2.version = 'ie8'
 WHERE tests.version = 'ie7' AND tests2.version IS NULL


2 commentaires

@Turek - Je dois être en désaccord. Comme toujours, vous auriez besoin de vérifier votre scénario mais vous n'êtes pas existant peut sensiblement surperformez-vous à gauche et null. par exemple. expliquant explicit.com/2009/09/15/...


Il est difficile de savoir quelle est la situation, par exemple Le même blog dit qu'il est préférable de faire rejoindre la jointure..is null dans mysql expliquant excédent.com/2009/09/18/... . Je dois admettre que je n'ai donné que la réponse parce que je savais que c'était le mieux dans MySQL.



0
votes
   SELECT test_name
     FROM tests 
    WHERE version = 'ie7' 
   EXCEPT 
   SELECT test_name
     FROM tests 
    WHERE version = 'ie8';

0 commentaires