Pytanie : Znalezienie wieloskładnikowy dopasowanie wewnątrz łączyć i także mieć "wnuk" rejestr w t-SQL

rozważać te 3 stół:

create stołowy tblFirstTable
(
FirstTablePK int nieobowiązujący,
FirstTableKeyA VARCHAR (2) nie null,
FirstTableKeyB VARCHAR (6) nie null,
FirstTableAltKeyA VARCHAR (2) nie null,
FirstTableAltKeyB VARCHAR (6) nie null,
FirstTableAltKeyC VARCHAR (1) nie null,
FirstTableAltKeyX VARCHAR (2) nie null,
FirstTableAltKeyY VARCHAR (6) nie null,
FirstTableAltKeyZ VARCHAR (1) nie null,
)

create stołowy tblSecondTable
(
SecondTablePK int nieobowiązujący,
SecondTableKeyA VARCHAR (2) nie null,
SecondTableKeyB VARCHAR (6) nie null,
SecondTableAltKeyX VARCHAR (2) nie null,
SecondTableAltKeyY VARCHAR (6) nie null,
SecondTableAltKeyZ VARCHAR (1) nie null,
Update_When DATETIME nieobowiązujący,
Update_By VARCHAR (50) nieobowiązujący,
)

create stołowy tblThirdTable
(
ThirdTablePK int nieobowiązujący,
SecondTableFK int nieobowiązujący,
AgentName VARCHAR (20) nie null
)

The łączyć między tblFirstTable i tblSecondTable być on
FirstTableKeyA = SecondTableKeyA I FirstTableKeyB =SecondTableKeyB

For tblFirstTable tblFirstTable łączyć, dla each wartość {FirstTableAltKeyX, FirstTableAltKeyY, FirstTableAltKeyZ}
there móc (1) lub więcej wartość wewnątrz {SecondTableAltKeyX, SecondTableAltKeyY, SecondTableAltKeyZ}. />Example być the klucz condition.

I polubić tylko rejestr od tblFirsttable gdy the tblFirsttable kluczowy warunek satysfakcjonować i także jeżeli tam  być dziecko rejestr dla tblSecondTable w tblThirdTable.

Example:
tblFirstTable
1, "AA", "BBBBBB", "CC", "DDDDDD", "E", "FF", "GGGGGG", "H'< br/>2, "@@", "######", "$$", "%%%%%%", "^", "&&"," ****** ', "("
3, "QQ", "WWWWWW", "EE", "RRRRRR", "T", "YY", "UUUUUU", "I'< br/>
tblSecondTable
10, "AA", "BBBBBB","II", "JJJJJJ", "K", datetime, John
11, "AA", "BBBBBB",", "MMMMMM", "N", datetime, Mary
12, "AA", "BBBBBB", "OO", "PPPPPP", "Q", datetime, Joe
13, "@@", "######", "))", "------", "=", datetime, Jim
14, "@@", "######", "~~", "!!! !!! ", "; ", datetime, Jack
15, "QQ", "WWWWWW", "AA", "SSSSSS", 'D'< br/>
tblThirdTable
20,11, 'Miriam Racques'< br/>21,12, 'Roger Portes'< br/>22,15, 'Mike Penguert'< br/>
*For "AA", "BBBBBB" w tblFirstTable, my mieć rejestr w tblSecondTable także, 3. W Ten Sposób my mieć wieloskładnikowy dopasowanie. #1. być kryterium #1. I przynajmniej jeden mieć dziecko rejestr w tblThirdTable. Hence oba warunek satysfakcjonować, i my polubić the rejestr w tblFirstTable w the query.

*For "@@", "######" w tblFirstTable, my mieć rejestr w tblSecondTable także, 2. W Ten Sposób my mieć wieloskładnikowy dopasowanie. #1. być kryterium #1. Ale rejestr mieć dziecko rejestr w tblThirdTable; ponieważ drugi kryterium nie udać się, my musieć the rząd od tblFirstTable.

*For "QQ", "WWWWWW" w tblFirstTable, my mieć tylko jeden dopasowanie w tblSecondTable (żadny wielokrotność dopasowanie). Nawet jeśli kod mieć dziecko rejestr (drugi kryterium satysfakcjonować), ponieważ the pierwszy kryterium satysfakcjonować, my przynosić the rząd od tblFirstTable w the query.

how ty budować the rezultat pragnąć w t-SQL kod?.

thank you

Odpowiedź : Znalezienie wieloskładnikowy dopasowanie wewnątrz łączyć i także mieć "wnuk" rejestr w t-SQL

Dobrze, móc dobrze strategia gdy ty móc od above…

The zasadniczy związek rozwiązywać using baza (jeżeli my potrzebować wszystkie szczegół):

wybrany T1.*, T2.*, T3.*
od tblFirstTable T1
wewnętrzny łączyć tblSecondTable T2 na T1.FirstTableKeyA = T2.SecondTableKeyA I T1.FirstTableKeyB =T2.SecondTableKeyB
wewnętrzny łączyć tblThirdTable T3 na T2.SecondTablePK = T3.SecondTableFK

-- Zważywaszy Na tam  być PK i FK my zakładać odpowiedni indexing na zważywaszy na.
-- W Ten Sposób, rozsądny indexing na the TableKeyA i TableKeyB kolumna w ich poszczególny stół także.
-- Który sposób że my móc rozsądnie szczęśliwy łączyć.
-- Ale my tylko naprawdę potrzebować kontuar… Nie szczegół…

wybrany FirstTablePK jako FPK, obliczenie (secondTablePK) jako T2_count, obliczenie (thirdTablePK) jako T3_count  
od tblFirstTable T1
wewnętrzny łączyć tblSecondTable T2 na T1.FirstTableKeyA = T2.SecondTableKeyA I T1.FirstTableKeyB =T2.SecondTableKeyB
wewnętrzny łączyć tblThirdTable T3 na T2.SecondTablePK = T3.SecondTableFK
grupa FirstTablePK
mieć obliczenie (secondTablePK) > (1)

-- Notatka, my musieć T3_count naprawdę, ponieważ the wewnętrzny łączyć rozwiązywać the istnienie przynajmniej (1) wejście w tblThirdTable
-- i naprawdę, my musieć T2_count ponieważ the Klauzula robić ten obliczenie dla
-- Ale my potrzebować szczegół, w ten sposób, musieć z powrotem the tblFirstTable dane.

wybiórka *
od (wybrany FirstTablePK jako FPK  
      od tblFirstTable T1
      wewnętrzny łączyć tblSecondTable T2 na T1.FirstTableKeyA = T2.SecondTableKeyA I T1.FirstTableKeyB =T2.SecondTableKeyB
      wewnętrzny łączyć tblThirdTable T3 na T2.SecondTablePK = T3.SecondTableFK
      grupa FirstTablePK
      mieć obliczenie (secondTablePK) > 1) s
wewnętrzny łączyć tblFirstTable na FPK = FirstTablePK

-- teraz, my mieć subquery dla nasz kontuar i wybierać z powrotem the tblFirstTable
-- w ten sposób, naprawdę my móc naprawdę element ten subquery w ten sposób my tylko odnosić sie stół tylko jeżeli ewentualny
-- i ponieważ ono być prosty kontuar, my móc właściwie ten część jako the subquery tylko.

wybiórka *
od tblFirstTable T1
Dokąd (1) <�>           od tblSecondTable T2
           wewnętrzny łączyć tblThirdTable T3 na T2.SecondTablePK = T3.SecondTableFK
           dokąd T1.FirstTableKeyA = T2.SecondTableKeyA I T1.FirstTableKeyB =T2.SecondTableKeyB)

--
Inne rozwiązania  
 
programming4us programming4us