2010-05-03 7 views
0

J'ai un ensemble de nombres et une table dans une base de données avec les colonnes id (clé primaire) et text (non nulle). Je voudrais créer une requête qui renvoie tous les nombres dans l'ensemble et le texte associé de la table. Malheureusement, tous les numéros existent dans id colonne de la base de données, cela ne fonctionnera pas:Utilisation d'un ensemble de nombres dans une base de données sans créer de table temporaire

select id, text 
from table 
where id in (<set of numbers>) 

Pour les ids non existants le mieux serait de retourner null que le texte de la requête.

Existe-t-il un moyen de produire la sortie désirée sans d'abord créer une table temporaire à partir de l'ensemble à l'intérieur de la base de données?

Le moteur de base de données utilisé est un Microsoft SQL Server 2008 SP1 mais je serais intéressé par toute solution avec n'importe quel moteur de base de données.

+1

Pourquoi vouloir éviter de créer une table temporaire? Cela semble être la meilleure solution évidente pour moi. – RationalGeek

+0

@jkohlhepp; ce n'est pas forcément la meilleure solution, par exemple oracle peut générer des nombres séquentiels avec une requête récursive duale qui évolue mieux que la version matérialisée. n'ont pas de données pour les performances sur MS SQL. – Unreason

+0

La raison exacte de cette requête a été fournie par Unreason - J'éviterais de créer fréquemment de très grandes tables. – Zizzencs

Répondre

0

Les solutions sont la base de données très spécifiques

  • MySQL n'a pas de bonne façon de faire ci-dessus sans tables temporaires
  • oracle peut faire la demande de façon très efficace avec des requêtes récursives (détails here)
  • ms sql peut le faire avec des requêtes récursives, mais je ne sais pas avec quelle efficacité

Vérifiez l'article lié et voir laquelle des requêtes MS SQL 2008 soutient et comment il fonctionne sur eux.

Questions connexes