2017-10-14 5 views
-1

Je suis en train d'écrire une requête qui doit effectuer join (ou where clause) selon les critères suivants:Vérification d'une sous requête pour contenir les résultats de l'autre dans T-SQL

sous-requête de la table gauche doit contenir les résultats de la sous-requête de la table de droite (les résultats doivent également être regroupés).

Tables (diagram)

sql script creating tables with data

critères exacts sont les suivants:

clients Choisir qui:

Pour chaque Question.Id dans [ClientSegment] Les questionIds

de '

doit être d'au moins un (équivalent sur Tout en LINQ) ClientAnswers.AnswerId de ceux [ClientSegmentAnswers]

Comment puis-je parvenir sans utiliser pour les boucles (curseurs) dans une seule requête?

UPD

de manuscrit pour créer des tables et des données

Résultat attendu

requête qui sélectionne Bob comme ne correspondant pour les consommateurs ClientSegment avec id = 1;

Répondre

0

SQL REJOINT aidera à atteindre cet objectif dans la requête unique,

par exemple:

select 
c.name, 
c.id, 
... 
from Question as que 
left join ClientSegment as cs on que.id=cs.id 
left join ClientSegmentAnswers as csans on csans.ClientSegmentID=cs.id 
left join Answer as ans on ans.id=csans.answerid 
left join ClientAnswer as ca on ca.answerid=ans.answerid 
left join Client as c on c.id=ca.ClientID 
where ca.ClientID is not null 

Cette requête renvoie uniquement CLIENTNAME qui répond à atleast une question, vous pouvez également modifier la requête pour votre besoin.

+0

J'ai éditer la question, ajouté des données d'échantillon. la requête que vous avez suggérée ne retourne pas ce qui est attendu, malheureusement –

+0

Vous voulez dire, Voulez-vous sélectionner uniquement les clients de type 1 de segment? Il est difficile d'utiliser votre structure parce que certains des ID de réponse viennent pour les deux types de segments E.g: AnswerID - 4. Mais vous pouvez omettre le type "2" en utilisant la requête de jointure gauche. –

+0

Non, la réponse a une clé étrangère, donc la réponse appartient à une seule question –