Microsoft
Software
Hardware
Network
Frage : Finden verbindet mehrfache Gleiche innen und „Enkelkind“ Aufzeichnungen in t-SQL auch haben
diese 3 Tabellen betrachten:
create Tabelle tblFirstTable
(
FirstTablePK int nicht ungültig,
FirstTableKeyA VARCHAR (2) nicht Null,
FirstTableKeyB VARCHAR (6) nicht Null,
FirstTableAltKeyA VARCHAR (2) nicht Null,
FirstTableAltKeyB VARCHAR (6) nicht Null,
FirstTableAltKeyC VARCHAR (1) nicht Null,
FirstTableAltKeyX VARCHAR (2) nicht Null,
FirstTableAltKeyY VARCHAR (6) nicht Null,
FirstTableAltKeyZ VARCHAR (1) nicht Null,
)
create Tabelle tblSecondTable
(
SecondTablePK int nicht ungültig,
SecondTableKeyA VARCHAR (2) nicht Null,
SecondTableKeyB VARCHAR (6) nicht Null,
SecondTableAltKeyX VARCHAR (2) nicht Null,
SecondTableAltKeyY VARCHAR (6) nicht Null,
SecondTableAltKeyZ VARCHAR (1) nicht Null,
Update_When das DATUM/UHRZEIT nicht ungültig,
Update_By VARCHAR (50) nicht ungültig,
)
create Tabelle tblThirdTable
(
ThirdTablePK int nicht ungültig,
SecondTableFK int nicht ungültig,
AgentName VARCHAR (20) nicht null
) verbinden
The zwischen tblFirstTable und ist on
FirstTableKeyA = SecondTableKeyA tblSecondTable UND FirstTableKeyB =SecondTableKeyB
For jeder von diesen verbindet, für jedes entsprechende Werte von {FirstTableAltKeyX, FirstTa
bleAltKeyY
, FirstTabl
eAltKeyZ}
there innen, sein können 1 oder mehr Werte {SecondTableAltKeyX, Second
TableAltKe
yY, SecondT
ableAltKey
Z}. Dieses ist der Schlüssel condition.
I möchte nur Aufzeichnungen von tblFirsttable vorwählen, wenn der oben genannte Schlüsselzustand erfüllt ist und auch, wenn es Kindaufzeichnung für tblSecondTable in tblThirdTable.
Example gibt:
tblFirstTable
1, „AA“, „BBBBBB“, „cm“, „DDDD
DD“, „E“, „F
F“, „GGGGGG
“, „H'< Br/>2, „@@“, „######“, „$$“, „%%%%
%%“, „^“, „&
&“,“ ******
', „(„
3, „QQ“, „WWWWWW“, „EE“, „RRRR
RR“, „T“, „Y
Y“, „UUUUUU
“, „I'< Br/>
tblSecondTable
10, „AA“, „BBBBBB“, „werden II“, „JJJ
JJJ“, „K“, d
atetime, Jo
hn
11, „AA“, „BBBBBB“,“, „MMM
MMM“, „N“, d
atetime, Ma
ry
12, „AA“, „BBBBBB“, „OO“, „PPP
PPP“, „Q“, d
atetime, Jo
e
13, „@@“, „######“, "))“, „---
---“, „=“, d
atetime, Ji
m
14, „@@“, „######“, „~~“, „!!!
!!! “, „; “, d
atetime, Ja
ck
15, „QQ“, „WWWWWW“, „AA“, „SSS
SSS“, 'D'< Br/>
tblThirdTable
20,11, 'Miriam Racques'< Br/>21,12, 'Roger Portes'< Br/>22,15, 'Mike Penguert'< Br/>
*For „AA“, „BBBBBB“ in tblFirstTable, haben wir Aufzeichnungen in tblSecondTable auch, 3 von ihnen. So haben wir mehrfache Gleiche. Dieses ist Kriterien #1. Und eins mindestens von ihnen hat eine Kindaufzeichnung in tblThirdTable. Folglich stellen beide Bedingungen zufrieden und wir möchten die Aufzeichnung in tblFirstTable im query.
*For „@@“ holen, „######“ in tblFirstTable, wir haben Aufzeichnungen in tblSecondTable auch, 2 von ihnen. So haben wir mehrfache Gleiche. Dieses ist Kriterien #1. Aber keine von ihnen haben Kindaufzeichnungen in tblThirdTable; weil zweite Kriterien ausfällt, müssen wir die Reihe von tblFirstTable.
*For „QQ“ nicht holen, „WWWWWW“ in tblFirstTable, wir haben nur ein Gleiches in tblSecondTable (keine Mehrfachverbindungsstellengleichen). Obwohl dieses eine Kindaufzeichnung (zweite Kriterien ist erfüllt), hat, weil die ersten Kriterien nicht erfüllt ist, holen wir nicht die Reihe von tblFirstTable im query.
how würden Sie aufbauen das Resultat, das im Code t-SQL? gewünscht wird.
thank you
Antwort : Finden verbindet mehrfache Gleiche innen und „Enkelkind“ Aufzeichnungen in t-SQL auch haben
Gut sein können einige Strategien, wie Sie von oben genanntem sehen können…
Die zugrunde liegenden Verhältnisse sind using eine Unterseite von entschlossen (wenn wir alle Details) benötigten:
T1.*, T2.*, T3.* vorwählen
von tblFirstTable T1
inner tblSecondTable T2 auf verbinden T1.FirstTableKeyA = T2.SecondTableKeyA UND T1.FirstTableKeyB =T2.SecondTableKeyB
inner tblThirdTable T3 auf verbinden T2.SecondTablePK = T3.SecondTableFK
-- In der Erwägung es PK und FK gibt, annehmen wir passende Index-Bewegung auf denen n.
-- So angemessen, Index-Bewegung auf den TableKeyA und TableKeyB Spalten in ihren jeweiligen Tabellen außerdem anzunehmen.
-- Welches bedeutet, dass wir using relativ glücklich sein können, verbindet.
-- Aber wir nur benötigen wirklich Kostenzähler… Nicht Details…
auserwähltes FirstTablePK als FPK, gelten (secondTablePK) als T2_count, gelten (thirdTablePK) als T3_count
von tblFirstTable T1
inner tblSecondTable T2 auf verbinden T1.FirstTableKeyA = T2.SecondTableKeyA UND T1.FirstTableKeyB =T2.SecondTableKeyB
inner tblThirdTable T3 auf verbinden T2.SecondTablePK = T3.SecondTableFK
Gruppe durch FirstTablePK
Zählimpuls (secondTablePK) > 1 haben
-- Anmerkung, müssen wir T3_count nicht wirklich zählen, weil die inneren lösen das Bestehen von mindestens 1 Eintrag in tblThirdTable verbinden
-- und wirklich, müssen wir T2_count nicht vorwählen, weil das Haben von Klausel diesen Zählimpuls für uns tut
-- Aber wir tun benötigen Details müssen die tblFirstTable Daten so zurückbekommen.
vorwählen *
von (FirstTablePK als FPK vorwählen
von tblFirstTable T1
inner tblSecondTable T2 auf verbinden T1.FirstTableKeyA = T2.SecondTableKeyA UND T1.FirstTableKeyB =T2.SecondTableKeyB
inner tblThirdTable T3 auf verbinden T2.SecondTablePK = T3.SecondTableFK
Gruppe durch FirstTablePK
Zählimpuls (secondTablePK) > 1) s haben
inner tblFirstTable auf verbinden FPK = FirstTablePK
-- jetzt haben wir einen Subquery für unseren Kostenzähler und vorwählen zurück das tblFirstTable le
-- so wirklich können wir Elemente dieses Subquery heraus aufspalten, also beziehen wir nur auf Tabellen einmal, wenn möglich
-- und weil es ein einfacher Kostenzähler ist, können wir dieses Teil als nur der Subquery wirklich haben.
vorwählen *
von tblFirstTable T1
Wo 1 <�> vom tblSecondTable T2
inner tblThirdTable T3 auf verbinden T2.SecondTablePK = T3.SecondTableFK
wo T1.FirstTableKeyA = T2.SecondTableKeyA UND T1.FirstTableKeyB =T2.SecondTableKeyB)
-- es konnte zusätzliche Weisen zu erforschen, aber zu denken, die die beste Leistung gibt, und die Bedachtsamkeit/die Schritte geben, die verwendet, um an diesen Punkt zu gelangen:)
Weitere Lösungen
Wort-Presse, die Frage bewirtet
asp.net: Mein Problem ist, benutze ich einen ajax Ergänzung Kalender, um BeginDate u. EndDate Werte einzutragen
Silverlight 4 UI Ereignisse
wie kann ich irgendeine Bildentschließung online ändern und sie zum lokalen PC dann innen sparen??
ZFS Sicherungshilfe Ubuntu 10.0.4 LTS
Form-Frage für Kristallreports
Betreffend INOTES in Lotos 8.5
Mühen, die ZWISCHEN Logik erhalten zu arbeiten
Spannungs-Sensor ermittelte einen Ausfall auf Bediener DELL-PowerEdge 2650
broadcom NIC teaming