J'ai besoin d'aide avec une requête SQL sur laquelle je travaille. Voici une version simplifiée des données avec lesquelles je travaille. J'ai 3 tables:Requête serveur SQL complexe
les contacts:
- ContactID
- ContactName
soumissions:
- SubmissionID
- ContactID
- SubmissionTypeID
SubmissionTypes:
- SubmissionTypeID
- SubmissionType
J'ai besoin de retourner tous les contacts (joints à Submissions
sur ContactID
) où il y a des SubmissionTypeIDs
qui correspondent à une liste de SubmissionTypeIDs
. La partie difficile est que je veux seulement des résultats où un contact a un enregistrement de soumission avec un SubmissionTypeID
qui correspond à chacune des valeurs dans la liste. Ainsi, par exemple, si j'avais ces données:
Contacts
----------------
1 | Jim Johnson
2 | Sally Anderson
SubmissionTypes
----------------------
1 | Contact Form
2 | Request Form
3 | Generic Form
Submissions
----------------------
1 | 1 | 1
2 | 1 | 2
3 | 2 | 1
Si mes SubmissionTypeID
valeurs sont 1 et 2, je veux obtenir les résultats suivants:
Jim Johnson | Contact Form
Jim Johnson | Request Form
Je ne voudrais pas voir Sally Anderson parce qu'elle n'a pas d'enregistrement dans les soumissions pour les deux valeurs.
Je suppose qu'il y a plusieurs façons de le faire. Je suis ravi de voir vos idées.
Merci!
en fonction d'autres contraintes, 'avoir count (*) = 2' pourrait devoir être' nombre ayant (submissiontypeid distinct) = 2'. +1 pour "intersect", cependant. – Laurence
@Laurence convenu, normalement je ferais sans distinctif par défaut, mais je viens de l'éditer car il ya probablement une chance décente qu'un contact puisse avoir plus d'une soumission du même type. –