2010-08-11 12 views
0

Sur sybase. J'ai une charge de clés primairesRecherche de clés dans une table db qui ne figure pas dans une liste

Si je fais:

touche de sélection de la table où clé (... liste d'environ 2000 clés ...)

Je reçois environ 1700 résultats . Quel est le moyen le plus simple d'obtenir une liste des ~ 300 entrées de ma liste qui ne sont pas présentes?

Il semble y avoir quelque chose qui devrait être facile, mais je ne peux pas travailler dehors ...

EDIT: Semble un exemple peut être pour

Si ma table a des touches 1,2,4 et ma liste est 1,2,3 alors je veux une requête qui me donnera la réponse 3 - l'élément dans ma liste qui n'est pas dans le tableau. Si j'utilise 'NOT IN' alors j'obtiens la réponse 4, ce qui est faux.

+1

Est-ce que sybase supporte cela? sélectionnez la touche de la table où la touche PAS dans (... liste d'environ 2000 touches ...) – LesterDove

+0

Vous voulez ceux de votre liste qui ne sont pas dans la table, ou ceux de votre table qui ne sont pas dans votre liste ? – AllenG

+0

Le premier. J'ai édité. – PaulJWilliams

Répondre

1

Je pense que vous aurez besoin de mettre vos éléments dans une table de leur choix pour les rendre sélectionnables. C'est la navigation simple après cela ...

SELECT key 
    FROM my_new_table 
    WHERE key NOT IN (SELECT key 
          FROM Table); 

(ou toute autre version plus rapide de la requête ci-dessus).

+0

+1: Compte tenu des clarifications, c'est presque certainement le meilleur moyen de s'y prendre. Pour les 2 000 éléments (ou plus), il est probablement préférable de tout mettre dans une table de toute façon (temporaire ou permanente). –

0

Je pense que votre réponse est réellement résolue par la solution @BrianHooper, mais votre question manque de clarification. Vous avez mentionné une "liste" de numéros ... contigus ou non n'est pas applicable. En réponse à mon commentaire, vous n'avez jamais déclaré que vous aviez deux tables ...

Ainsi, il semble juste pour le bien et la facilité de suivre: Vous avez une table d'inventaire principale avec 2000 éléments dedans. De plus, vous avez un tableau des activités de vente de tout l'inventaire qui a déjà vendu ... Cette table pourrait contenir 10 000 lignes, dont de nombreuses ventes de nombreux articles ... Cependant, CERTAINS articles n'ont JAMAIS été vendus dans le 10 000 ventes. Vous voulez savoir quels articles n'ont JAMAIS été vendus en 2000 ...

Ma requête sera basée sur le scénario ci-dessus, mais vous devrez faire un jumelage avec votre scénario actuel.

select 
     MyItemID 
    from 
     MyInventoryTable 
    where 
     MyItemID NOT IN 
       (select SoldItemID 
        from SalesData);