2011-08-21 2 views
0

Ma demande avait d'abord une requête similaire à celui-ci: -SQL clause Where

SELECT column_name from PERSON 
WHERE name in (list); 

où la liste est la liste séparée par des virgules. Mais, maintenant l'exigence a changé et je dois interroger la table de personnes avec le nom et l'âge donnés. J'ai le nomAgeList.

Dans un premier temps, je pensais une requête similaire à ceci fonctionnerait (Créer nameList et ageList de nameAgeList)

SELECT column_name from Person 
WHERE name in (nameList) 
AND age in (ageList) 

Mais après avoir réfléchi attentivement, cela semble être une requête erronée.

S'il vous plaît laissez-moi savoir comment dois-je procéder à l'avance avec cette requête.

+5

Qu'est-ce que 'nameAgeList'? Pourquoi est-ce la "mauvaise requête"? Est-ce que cela donne des résultats incorrects? Avez-vous une erreur? Votre serveur a-t-il explosé? –

+0

Est-ce peut-être devoirs ou une telle? Quelle base de données utilisez-vous, ou êtes-vous seulement autorisé sql standard? – jswolf19

+0

1) Quelle plateforme? 2) Quelle est la forme 'nameAgeList'? 3) Si c'est une chaîne, pourquoi? 4) Les noms sont-ils réellement liés aux âges? – Aaronaught

Répondre

0

Il est pas assez, et celui-ci ne fonctionne que lorsque vous pouvez générer votre déclaration dans le code:

SELECT column from Person 
    WHERE 1=1 
     AND ( (name = name1 and age = age1) 
      OR (name = name2 and age = age2) 
      OR (name = name3 and age = age3) 
      OR (name = name4 and age = age4) 
      OR (name = name5 and age = age5) 
      ... et cetera 
     ) 

Maintenant, si vous pouviez mettre ces listes dans les tables que vous pourriez faire beaucoup mieux que cela. Est-il possible d'obtenir ces listes dans la base de données? Je suppose que vous avez vraiment besoin d'une table Person qui contient le nom et l'âge de chaque individu.

+1

ouais, c'est horrible, ne fais pas ça! –

+0

Pour les devoirs c'est bien, je dirais – Martin

2

Une option consiste à créer une table temporaire (ou si SQL Server, une variable de table), placez vos noms et âges dans ce tableau, puis simplement se joindre à lui:

SELECT column_name from Person p 
INNER JOIN myTempTable t ON t.Name = p.Name AND t.age = p.age 
5

Sous Oracle, vous peut faire ceci:

SELECT * FROM Person 
WHERE 
    (name, age) IN (
     ('name1', age1), 
     ('name2', age2) 
     -- Etc... 
    ) 

Vous pouvez avoir jusqu'à 1000 tuples dans cette liste.

+0

+1 pour la limite 1000^_ ^ – jswolf19