2009-06-09 10 views
0


Pouvez-vous m'aider s'il vous plaît à comprendre où est le problème?Problème avec l'utilisation de IN en sql

SELECT mz_t_NaznExec.p_Services FROM mz_t_NaznExec 

script ci-dessus retourne recordset où record avec p_Services = 200000000000115 existe pas

SELECT mz_t_Services.p_ID from mz_t_Services 

script ci-dessus retourne recordset où enregistrement avec id = 200000000000115 existe
Mais cette requête renvoie aucun enregistrement

SELECT mz_t_Services.p_ID from mz_t_Services where mz_t_Services.p_ID not in(SELECT mz_t_NaznExec.p_Services FROM mz_t_NaznExec) 

J'utilise MSSQL
EDIT:
Les deux types de données p_ID et p_Services ara bigint

+0

Que signifie "SELECT mz_t_NaznExec.p_Services FROM mz_t_NaznExec"? – razzed

+0

Comment est votre base de données. Mz_t_NaznExec.p_Services est une clé étrangère à mz_t_Services.p_ID? – jao

+4

... et qui a imaginé ces noms de table? –

Répondre

4

Y at-il des valeurs NULL dans mz_t_NaznExec.p_Services? "NOT IN" échouera toujours s'il y a même une valeur NULL dans le jeu de résultats.

+0

Yess, il y a, merci beaucoup RBarry! –

+0

Maintenant j'ai une autre bonne raison pour laquelle j'utilise toujours une jointure gauche (externe) au lieu de "dans" :) – VVS

+0

Il y a une bonne discussion de ceci ici: http://stackoverflow.com/questions/129077/sql-not-in -constraint-and-null-values ​​ –

1
SELECT mz_t_Services.p_ID from mz_t_Services where mz_t_Services.p_ID not in(SELECT ISNULL(mz_t_NaznExec.p_Services,0) FROM mz_t_NaznExec) 

ou mieux

SELECT mz_t_Services.p_ID from mz_t_Services where mz_t_Services.p_ID not in(SELECT mz_t_NaznExec.p_Services FROM mz_t_NaznExec WHERE mz_t_NaznExec.p_Services is not null) 
+0

Merci beaucoup moi-même! J'ai encore résolu le problème –

0

Cela fonctionne également:

SELECT p_id 
    FROM mz_t_services 
WHERE NOT EXISTS 
     (SELECT 1 
      FROM mz_t_naznexec 
      WHERE mz_t_naznexec.p_services = mz_t_services.p_id 
     ) 

je le préfère aux solutions ci-dessus, car il utilise plus fiable index (dans mon expérience). Cela fonctionne, qu'il y ait ou non des valeurs nulles, vous pouvez donc utiliser ce formulaire tout le temps sans tenir compte de vos attentes concernant le contenu de la table, et ne pas vous inquiéter des personnes qui vous demandent pourquoi vous recherchez des valeurs nulles dans une colonne Leur permettre.

Dans tous les cas, vous devriez essayer les deux solutions et voir ce qui fonctionne mieux pour vous.