Question : Trouvant les allumettes multiples se joignent dedans et avoir également des disques de « enfant » dans t-SQL

considérer ces 3 tables : tblFirstTable
(
FirstTablePK international non nul,
FirstTableKeyA VARCHAR (2) pas nulle,
FirstTableKeyB VARCHAR (6) pas nulle,
FirstTableAltKeyA VARCHAR (2) pas nulle,
FirstTableAltKeyB VARCHAR (6) pas nulle,
FirstTableAltKeyC VARCHAR (1) pas nulle,
FirstTableAltKeyX VARCHAR (2) pas nulle,
FirstTableAltKeyY VARCHAR (6) pas nulle, tblSecondTable
(
SecondTablePK international non nul,
SecondTableKeyA VARCHAR (2) pas nulle,
SecondTableKeyB VARCHAR (6) pas nulle de table du

create de table de

create de
FirstTableAltKeyZ VARCHAR (1) pas nulle,
), le

The du tblThirdTable
(
ThirdTablePK international non nul,
SecondTableFK international non nul, null
de table du

create du
SecondTableAltKeyX VARCHAR (2) pas nulle,
SecondTableAltKeyY VARCHAR (6) pas nulle,
SecondTableAltKeyZ VARCHAR (1) pas nulle, DATE-HEURE de
Update_When non nulle,
Update_By VARCHAR (50) non nuls,
) de
AgentName VARCHAR (20) pas) se joignent entre tblFirstTable et tblSecondTable est l'on
FirstTableKeyA = SecondTableKeyA ET le =SecondTableKeyB

For de FirstTableKeyB chacun de ces derniers se joint, pour le chaque des valeurs correspondantes {FirstTableAltKeyX, FirstTableAltKeyY, FirstTableAltKeyZ} du
there peut être 1 valeurs ou plus dedans {SecondTableAltKeyX, SecondTableAltKeyY, SecondTableAltKeyZ}. C'est la clef condition.

I voudrait choisir seulement des disques à partir de tblFirsttable quand l'état principal ci-dessus est satisfaisant et aussi s'il y a disque d'enfant pour tblSecondTable dans tblThirdTable.

Example :
tblFirstTable
1, « aa », « BBBBBB », « cc », « DDDDDD », « E », « FF », « GGGGGG », « Br/>2 de H'<, « @@ », « ###### », « $$ », « %%%%%% », « ^ », « && », » ', « ("
3 de ******, « QQ », « WWWWWW », « l'EE », « RRRRRR », « T », « YY », « UUUUUU », « Br/>
tblSecondTable
10 d'I'<, « aa », « BBBBBB »,« II », « JJJJJJ », « K », le datetime, John
11, « aa », « BBBBBB », », « MMMMMM », « N », le datetime, Mary
12, « aa », « BBBBBB », « OO », « PPPPPP », « Q », le datetime, Joe
13, « @@ », « ###### », ")) », « ------ », « = », datetime, Jim
14, « @@ », « ###### », « ~~ », « ! ! ! ! ! !  », « ;  », le datetime, Jack
15, « QQ », « WWWWWW », « aa », « SSSSSS », le 'Br/>
tblThirdTable
20,11 de D'<, 'le Br/>21,12 de Racques'< de Miriam, 'le Br/>22,15 de Portes'< de Roger, 'le Br/>
*For « aa » de Penguert'< de Mike, « BBBBBB » dans tblFirstTable, nous avons des disques dans tblSecondTable également, 3 d'entre elles. Ainsi nous avons les allumettes multiples. C'est des critères de #1. Et au moins l'un d'entre eux a un disque d'enfant dans tblThirdTable. Par conséquent les deux conditions satisfont, et nous voudrions apporter le disque dans tblFirstTable dans le query.

*For « @@ », « ###### » dans tblFirstTable, nous avons des disques dans tblSecondTable également, 2 d'entre elles. Ainsi nous avons les allumettes multiples. C'est des critères de #1. Mais aucun de eux n'a des disques d'enfant dans tblThirdTable ; parce que les deuxièmes critères échoue, nous ne devons pas apporter la rangée de tblFirstTable.

*For « QQ », « WWWWWW » dans tblFirstTable, nous avons seulement une allumette dans tblSecondTable (aucunes allumettes de multiple). Quoique ceci ait un disque d'enfant (les deuxièmes critères est satisfaisant), parce que les premiers critères n'est pas satisfaisant, nous n'apporterons pas la rangée de tblFirstTable dans le query.

how vous établirions le résultat désiré en code t-SQL ?.

thank you
class= de

Réponse : Trouvant les allumettes multiples se joignent dedans et avoir également des disques de « enfant » dans t-SQL

Bien, peuvent être quelques stratégies comme vous pouvez voir de ci-dessus…

Les rapports fondamentaux sont resolved using une base de (si nous avions besoin de tous les détails) :

choisir T1.*, T2.*, T3.*
du T1 tblFirstTable
intérieur joindre le T2 tblSecondTable sur T1.FirstTableKeyA = T2.SecondTableKeyA ET T1.FirstTableKeyB =T2.SecondTableKeyB
intérieur joindre le T3 tblThirdTable sur T2.SecondTablePK = T3.SecondTableFK

-- Vu qu'il y a les PK et des FK nous assumons l'indexation appropriée sur ceux.
-- Ainsi, raisonnable pour assumer l'indexation sur les colonnes de TableKeyA et de TableKeyB dans leurs tables respectives aussi bien.
-- Ce qui signifie que nous pouvons être raisonnablement heureux using se joint.
-- Mais nous avons besoin seulement vraiment de compteurs… Pas détails…

FirstTablePK choisi comme FPK, compte (secondTablePK) comme T2_count, compte (thirdTablePK) comme T3_count  
du T1 tblFirstTable
intérieur joindre le T2 tblSecondTable sur T1.FirstTableKeyA = T2.SecondTableKeyA ET T1.FirstTableKeyB =T2.SecondTableKeyB
intérieur joindre le T3 tblThirdTable sur T2.SecondTablePK = T3.SecondTableFK
groupe par FirstTablePK
ayant le compte (secondTablePK) > 1

-- Note, nous ne devons pas compter T3_count vraiment, parce que les intérieurs se joignent résoudront l'existence au moins de 1 entrée dans tblThirdTable
-- et vraiment, nous ne devons pas choisir T2_count parce qu'avoir la clause fait ce compte pour nous
-- Mais nous faisons avons besoin de détails, ainsi, devons récupérer les données tblFirstTable.

choisir *
de (choisir FirstTablePK comme FPK  
      du T1 tblFirstTable
      intérieur joindre le T2 tblSecondTable sur T1.FirstTableKeyA = T2.SecondTableKeyA ET T1.FirstTableKeyB =T2.SecondTableKeyB
      intérieur joindre le T3 tblThirdTable sur T2.SecondTablePK = T3.SecondTableFK
      groupe par FirstTablePK
      ayant le compte (secondTablePK) > 1) s
intérieur joindre tblFirstTable sur FPK = FirstTablePK

-- maintenant, nous avons une sous-question pour notre compteur et choisissons en arrière le tblFirstTable
-- ainsi, vraiment nous pouvons dédoubler dehors des éléments de cette sous-question ainsi nous nous référons seulement à des tables une fois si possible
-- et parce que c'est un compteur simple, nous pouvons réellement avoir cette partie comme sous-question seulement.

choisir *
du T1 tblFirstTable
Là où 1 <�>           du T2 tblSecondTable
           intérieur joindre le T3 tblThirdTable sur T2.SecondTablePK = T3.SecondTableFK
           là où T1.FirstTableKeyA = T2.SecondTableKeyA ET T1.FirstTableKeyB =T2.SecondTableKeyB)

-- il pourrait y avoir des manières additionnelles de les explorer, mais penser qui donne la meilleure exécution, et les discussions/étapes employées pour obtenir à ce point :)
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us