Questione : Trovando i fiammiferi multipli dentro si uniscono ed anche avere annotazioni “del nipote„ nello t-SQL

considerare queste 3 tabelle: tblFirstTable
(
FirstTablePK int non nullo,
FirstTableKeyA VARCHAR (2) non posizione di segnale minimo,
FirstTableKeyB VARCHAR (6) non posizione di segnale minimo,
FirstTableAltKeyA VARCHAR (2) non posizione di segnale minimo,
FirstTableAltKeyB VARCHAR (6) non posizione di segnale minimo,
FirstTableAltKeyC VARCHAR (1) non posizione di segnale minimo,
FirstTableAltKeyX VARCHAR (2) non posizione di segnale minimo,
FirstTableAltKeyY VARCHAR (6) non posizione di segnale minimo, tblSecondTable
(
SecondTablePK int non nullo,
SecondTableKeyA VARCHAR (2) non posizione di segnale minimo,
SecondTableKeyB VARCHAR (6) non posizione di segnale minimo della tabella del

create della tabella del

create del
FirstTableAltKeyZ VARCHAR (1) non posizione di segnale minimo,
), il

The del tblThirdTable
(
ThirdTablePK int non nullo,
SecondTableFK int non nullo, null
della tabella del

create del
SecondTableAltKeyX VARCHAR (2) non posizione di segnale minimo,
SecondTableAltKeyY VARCHAR (6) non posizione di segnale minimo,
SecondTableAltKeyZ VARCHAR (1) non posizione di segnale minimo, DATETIME del
Update_When non nullo,
Update_By VARCHAR (50) nulli,
) del
AgentName VARCHAR (20) non) si unisce fra tblFirstTable e tblSecondTable è il on
FirstTableKeyA = SecondTableKeyA E il =SecondTableKeyB

For di FirstTableKeyB tutto di questi si unisce, per l'ogni i valori corrispondenti {FirstTableAltKeyX, FirstTableAltKeyY, FirstTableAltKeyZ} di
there può essere 1 o più valore dentro {SecondTableAltKeyX, SecondTableAltKeyY, SecondTableAltKeyZ}. Ciò è la chiave condition.

I vorrebbe selezionare soltanto le annotazioni a partire da tblFirsttable quando lo stato chiave di cui sopra è satisfied ed anche se ci è annotazione del bambino per tblSecondTable in tblThirdTable.

Example:
tblFirstTable
1, “aa„, “BBBBBB„, “cc„, “DDDDDD„, “E„, “FF„, “GGGGGG„, “Br/>2 del H'<, “@@„, “######„, “$$„, “%%%%%%„, “^„, “&&„,„ ', “("
3 del ******, “QQ„, “WWWWWW„, “l'EE„, “RRRRRR„, “T„, “YY„, “UUUUUU„, “Br/>
tblSecondTable
10 del I'<, “aa„, “BBBBBB„,“II„, “JJJJJJ„, “K„, il datetime, John
11, “aa„, “BBBBBB„,„, “MMMMMM„, “la N„, il datetime, Mary
12, “aa„, “BBBBBB„, “OO„, “PPPPPP„, “la Q„, il datetime, Joe
13, “@@„, “######„, "))„, “------„, “=„, datetime, Jim
14, “@@„, “######„, “~~„, “!!! !!! „, “; „, datetime, Jack
15, “QQ„, “WWWWWW„, “aa„, “SSSSSS„, 'Br/>
tblThirdTable
20,11 del D'<, 'Br/>21,12 del Racques'< di Miriam, 'Br/>22,15 del Portes'< di Roger, 'Br/>
*For “aa„ del Penguert'< di Mike, “BBBBBB„ in tblFirstTable, abbiamo annotazioni in tblSecondTable inoltre, 3 di loro. Così abbiamo fiammiferi multipli. Ciò è test di verifica #1. Ed almeno uno di loro ha un'annotazione del bambino in tblThirdTable. Quindi entrambe le circostanze soddisfanno e vorremmo portare l'annotazione in tblFirstTable nel query.

*For “@@„, “######„ in tblFirstTable, noi abbiamo annotazioni in tblSecondTable inoltre, 2 di loro. Così abbiamo fiammiferi multipli. Ciò è test di verifica #1. Ma nessun di loro hanno annotazioni del bambino in tblThirdTable; perché i secondi test di verifica viene a mancare, non dobbiamo portare la fila da tblFirstTable.

*For “QQ„, “WWWWWW„ in tblFirstTable, noi abbiamo soltanto un fiammifero in tblSecondTable (nessun fiammiferi di multiplo). Anche se questo ha un'annotazione del bambino (i secondi test di verifica è satisfied), perché i primi test di verifica non è satisfied, non porteremo la fila da tblFirstTable nel query.

how voi svilupperemmo il risultato voluto nel codice t-SQL?.

thank you
class= del

Risposta : Trovando i fiammiferi multipli dentro si uniscono ed anche avere annotazioni “del nipote„ nello t-SQL

Bene, possono essere alcune strategie come potete vedere dal di cui sopra…

I rapporti di fondo sono resolved using una base di (se avessimo bisogno di tutti i particolari):

selezionare T1.*, T2.*, T3.*
dal T1 tblFirstTable
interno unire il T2 tblSecondTable su T1.FirstTableKeyA = T2.SecondTableKeyA E T1.FirstTableKeyB =T2.SecondTableKeyB
interno unire il T3 tblThirdTable su T2.SecondTablePK = T3.SecondTableFK

-- Visto che ci sono i PK e le FK ammettiamo l'indirizzamento adatto su quelli.
-- Così, ragionevole per ammettere indirizzamento sulle colonne di TableKeyB e di TableKeyA in loro rispettive tabelle pure.
-- Quale significa che possiamo essere ragionevolmente felici using si unisce.
-- Ma realmente abbiamo bisogno soltanto dei contatori… Non particolari…

FirstTablePK prescelto come FPK, conteggio (secondTablePK) come T2_count, conteggio (thirdTablePK) come T3_count  
dal T1 tblFirstTable
interno unire il T2 tblSecondTable su T1.FirstTableKeyA = T2.SecondTableKeyA E T1.FirstTableKeyB =T2.SecondTableKeyB
interno unire il T3 tblThirdTable su T2.SecondTablePK = T3.SecondTableFK
gruppo da FirstTablePK
avendo conteggio (secondTablePK) > 1

-- Nota, non dobbiamo contare T3_count realmente, perché l'interni si uniscono risolveranno l'esistenza almeno di 1 voce in tblThirdTable
-- e realmente, non dobbiamo selezionare T2_count perché avere clausola ci fa quel conteggio per
-- Ma facciamo abbiamo bisogno dei particolari, così, dobbiamo ottenere indietro i dati tblFirstTable.

selezionare *
da (selezionare FirstTablePK come FPK  
      dal T1 tblFirstTable
      interno unire il T2 tblSecondTable su T1.FirstTableKeyA = T2.SecondTableKeyA E T1.FirstTableKeyB =T2.SecondTableKeyB
      interno unire il T3 tblThirdTable su T2.SecondTablePK = T3.SecondTableFK
      gruppo da FirstTablePK
      avendo conteggio (secondTablePK) > 1) s
interno unire tblFirstTable su FPK = FirstTablePK

-- ora, abbiamo una sottointerrogazione per il nostro contatore e selezioniamo indietro il tblFirstTable
-- così, realmente possiamo spaccare fuori gli elementi di quella sottointerrogazione in modo da ci riferiamo soltanto una volta alle tabelle se possibile
-- e perché è un contatore semplice, possiamo realmente avere quella parte come la sottointerrogazione soltanto.

selezionare *
dal T1 tblFirstTable
Dove 1 <�>           da T2 tblSecondTable
           interno unire il T3 tblThirdTable su T2.SecondTablePK = T3.SecondTableFK
           dove T1.FirstTableKeyA = T2.SecondTableKeyA E T1.FirstTableKeyB =T2.SecondTableKeyB)

-- ci potrebbero essere sensi supplementari esplorare, ma pensare che desse la migliore prestazione e le discussioni/punti usati per ottenere a quel punto:)
Altre soluzioni  
 
programming4us programming4us