Microsoft
Software
Hardware
Network
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, FirstTa
bleAltKeyY
, FirstTabl
eAltKeyZ} du
there peut être 1 valeurs ou plus dedans {SecondTableAltKeyX, Second
TableAltKe
yY, SecondT
ableAltKey
Z}. 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 », « DDDD
DD », « E », « F
F », « GGGGGG
», « Br/>2 de H'<, « @@ », « ###### », « $$ », « %%%%
%% », « ^ », « &
& », »
', « ("
3 de ******, « QQ », « WWWWWW », « l'EE », « RRRR
RR », « T », « Y
Y », « UUUUUU
», « Br/>
tblSecondTable
10 d'I'<, « aa », « BBBBBB »,« II », « JJJ
JJJ », « K », le d
atetime, Jo
hn
11, « aa », « BBBBBB », », « MMM
MMM », « N », le d
atetime, Ma
ry
12, « aa », « BBBBBB », « OO », « PPP
PPP », « Q », le d
atetime, Jo
e
13, « @@ », « ###### », ")) », « ---
--- », « = », d
atetime, Ji
m
14, « @@ », « ###### », « ~~ », « ! ! !
! ! ! », « ; », le d
atetime, Ja
ck
15, « QQ », « WWWWWW », « aa », « SSS
SSS », 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 ?