2010-12-09 9 views
1

J'ai des problèmes avec ce que je pense devrait être la plus simple des instructions SQL, mais cela ne fonctionne pas pour moi ...Comment faire cette simple instruction SQL SELECT?

J'ai 4 tables: S, P, J et SPJ où SPJ est fondamentalement un table reliant tous les ID ensemble.

Maintenant, la déclaration requise est: "Obtenir les numéros de fournisseur pour les fournisseurs qui fournissent la partie P2 et la partie P4."

SELECT SNO FROM SPJ WHERE PNO = 'P2' AND PNO = 'P4'
- Aucun résultat (ce qui est faux)

SELECT SNO FROM SPJ WHERE PNO = 'P2' UNION SELECT SNO FROM SPJ WHERE PNO = 'P4'
- renvoie le résultat, plus un supplément qui fournit seulement l'un des deux ...

J'ai essayé tous manière de déclarations, mais ne peut pas le comprendre, je sais que ça doit être simple, mais je ne peux tout simplement pas le voir ...

Quelqu'un a des idées?

Vive

+0

nous aiderait si vous fournir quelques exemples de données et les résultats attendus et les résultats renvoyés lorsque vous exécutez les instructions ci-dessus Ne pas – Sathya

+1

@ Chris utiliser et comme cela se traduirait par une logique booléenne incorrecte. Changez le ET en OR. – JonH

Répondre

5

Cela vous permettra d'obtenir des fournisseurs qui fournissent les deux pièces, par opposition à ceux qui fournissent l'un ou l'autre.

select sno 
    from spj 
    where pno in ('P2','P4') 
    group by sno 
    having count(distinct pno) = 2 
+3

+1: Ne répondez que jusqu'à présent qui implémente "P2 et P4". – Ronnis

1
SELECT SNO FROM SPJ WHERE PNO in ('P2','P4') 
+1

... pour clarifier, OP utilisé 'AND'. Un seul enregistrement ne peut pas contenir à la fois «P2» et «P4» dans «PNO» en même temps. L'opérateur dans la requête d'origine aurait dû être "OR". – FrustratedWithFormsDesigner

+0

comme avec la deuxième déclaration, cela renvoie un résultat qui ne fournit que celui ... –

+0

@Chris Edwards: C'est parce que cette requête n'exclut pas les fournisseurs qui fournissent des choses en dehors de P2 et P4. Cette exigence ajoutera une légère torsion de la complexité. – FrustratedWithFormsDesigner

0

Mieux vaut utiliser OU

SELECT SNO FROM SPJ WHERE PNO = 'P2' OR PNO= 'P4' 
+0

cela retournera les résultats que le fournisseur ou, et je ne veux que les fournisseurs qui font les deux ... –

2

Ou comme une alternative à @Sathya

SELECT SNO 
FROM SPJ 
WHERE PNO = 'P2' 
OR PNO = 'P4' 
0

« SELECT SNO DE SPJ OU PNO = 'P2' ET PNO = 'P4' "

évidemment le PNO ne peut pas être à la fois P2 et p4 en même temps. il est difficile de répondre à votre question sans connaître le schéma db, vous devriez donner une description de vos tables.

Questions connexes