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. Merci! P> P>
5 Réponses :
Vous voulez probablement dire: (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' ":)) p> p>
Essayez ceci
Ne doit pas être évité autant que possible.
Vous manquez une condition sur la sous-requête pour correspondre aux lignes vers la sélection extérieure E.g.:
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
@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.
SELECT test_name
FROM tests
WHERE version = 'ie7'
EXCEPT
SELECT test_name
FROM tests
WHERE version = 'ie8';