Desktop
Website
Multimedia
Database
Security
Enterprise
Fråga : Den finna multipeln matchar sammanfogar in och också att ha ”barnbarn” rekord i t-SQL
betrakta dessa 3 bordlägger:
create bordlägger tblFirstTable
(
inte ogiltiga FirstTablePK int,
2) inte ogiltiga FirstTableKeyA VARCHAR (,
6) inte ogiltiga FirstTableKeyB VARCHAR (,
2) inte ogiltiga FirstTableAltKeyA VARCHAR (,
6) inte ogiltiga FirstTableAltKeyB VARCHAR (,
1) inte ogiltiga FirstTableAltKeyC VARCHAR (,
2) inte ogiltiga FirstTableAltKeyX VARCHAR (,
6) inte ogiltiga FirstTableAltKeyY VARCHAR (,
1) inte ogiltiga FirstTableAltKeyZ VARCHAR (,
)
create bordlägger tblSecondTable
(
inte ogiltiga SecondTablePK int,
2) inte ogiltiga SecondTableKeyA VARCHAR (,
6) inte ogiltiga SecondTableKeyB VARCHAR (,
2) inte ogiltiga SecondTableAltKeyX VARCHAR (,
6) inte ogiltiga SecondTableAltKeyY VARCHAR (,
1) inte ogiltiga SecondTableAltKeyZ VARCHAR (, inte ogiltig DATETIME för
Update_When,
50) inte ogiltiga Update_By VARCHAR (,
create för
) bordlägger
The för tblThirdTable
(
inte ogiltiga ThirdTablePK int,
inte ogiltiga SecondTableFK int, null
för
AgentName VARCHAR (20) inte) sammanfogar mellan tblFirstTable, och tblSecondTable är on
FirstTableKeyA = SecondTableKeyA, OCH FirstTableKeyB =SecondTableKeyB
For alla av dessa sammanfogar, for varje som motsvarar, värderar av {FirstTableAltKeyX, FirstTa
bleAltKeyY
, FirstTabl
eAltKeyZ}
there kan vara 1 eller mer värderar in {SecondTableAltKeyX, Second
TableAltKe
yY, SecondT
ableAltKey
Z}. Denna är den nyckel- skulle något liknande för condition.
I som väljer endast rekord från tblFirsttable, när det ovannämnda nyckel- villkorar är satisfied, och också, om det finns barnrekordet för tblSecondTable i tblThirdTable.
Example:
tblFirstTable
1, ”AA”, ”BBBBBB”, ”CC”, ”DDDD
DD”, ”E”, ”F
F”, ”GGGGGG
”, ”H'
2, ”@@”, ”######”, ”$$”, ”%%%%
%%”, ”^”, ”&
&”,” ******
', ”(”
3, ”QQ”, ”WWWWWW”, ”EE”, ”RRRR
RR”, ”T”, ”Y
Y”, ”UUUUUU
”, ”I'
tblSecondTable
10, ”AA”, ”BBBBBB” ”II”, ”JJJ
JJJ”, ”K”, d
atetime, Jo
hn
11, ”AA”, ”BBBBBB”, ska”, ”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'
tblThirdTable
20,11, 'Miriam Racques'
21,12, 'Roger Portes'
22,15, 'Mike Penguert'
*For ”AA”, ”BBBBBB” i tblFirstTable, vi har rekord i tblSecondTable också, 3 av dem. Så vi har multipelmatcher. Detta är kriterier #1. Och ett åtminstone av dem har ett barnrekord i tblThirdTable. Hence båda villkorar tillfredsställer, och vi skulle något liknande för att komma med rekordet i tblFirstTable i query.
*For ”@@”, ”######” i tblFirstTable, oss har rekord i tblSecondTable också, 2 av dem. Så vi har multipelmatcher. Detta är kriterier #1. Men inga av dem har barnrekord i tblThirdTable; därför att understödja kriteriumkuggningar, vi måste inte att komma med ro från tblFirstTable.
*For ”QQ”, ”WWWWWW” i tblFirstTable, oss har endast en match i tblSecondTable (inga multipelmatcher). (Understödja kriterier är satisfied), även om detta har ett barnrekord, därför att de första kriterierna inte är satisfied, vi ska för att inte komma med ro från tblFirstTable i query.
how skulle dig bygger det önskade resultatet i t-SQL kodifierar?.
thank you
" klar "
Svar : Den finna multipeln matchar sammanfogar in och också att ha ”barnbarn” rekord i t-SQL
Välla fram, kan vara några strategier, som du kan se från ovannämnt…,
De bakomliggande förhållandena lösas using en basera av (om alla vi behövde specificerar):
välj T1.*, T2.*, T3.*
från tblFirstTable T1
inre sammanfoga tblSecondTable T2 på T1.FirstTableKeyA = T2.SecondTableKeyA OCH T1.FirstTableKeyB =T2.SecondTableKeyB
inre sammanfoga tblThirdTable T3 på T2.SecondTablePK = T3.SecondTableFK
-- Considering det finns PK och FKS, vi antar anslår att indexera på de.
-- Så rimligt för att anta att indexera på de TableKeyA och TableKeyB kolonnerna i deras respektive bordlägger som väl.
-- Vilket hjälpmedel, att vi kan vara rimligen lyckliga using sammanfogar.
-- Men vi endast behöver egentligen kontrar…, Inte specificerar…,
valda FirstTablePK som FPK, räkning (secondTablePK) som T2_count, räkning (thirdTablePK) som T3_count
från tblFirstTable T1
inre sammanfoga tblSecondTable T2 på T1.FirstTableKeyA = T2.SecondTableKeyA OCH T1.FirstTableKeyB =T2.SecondTableKeyB
inre sammanfoga tblThirdTable T3 på T2.SecondTablePK = T3.SecondTableFK
grupp av FirstTablePK
ha räkningen (secondTablePK) > 1
-- Notera oss måste inte att räkna T3_count egentligen, därför att de inre sammanfogar ska beslutsamhet existensen av åtminstone 1 tillträde i tblThirdTable
-- och egentligen, vi måste inte att välja T2_count, därför att ha sats gör den räkning för oss
-- Men vi behöver specificerar, så, måste att få baksida de tblFirstTable datan.
välj *
från (välj FirstTablePK som FPK
från tblFirstTable T1
inre sammanfoga tblSecondTable T2 på T1.FirstTableKeyA = T2.SecondTableKeyA OCH T1.FirstTableKeyB =T2.SecondTableKeyB
inre sammanfoga tblThirdTable T3 på T2.SecondTablePK = T3.SecondTableFK
grupp av FirstTablePK
ha räkningen (secondTablePK) > 1) s
inre sammanfoga tblFirstTable på FPK = FirstTablePK
-- nu vi har en subquery för vårt att kontra och välja tillbaka det tblFirstTable
-- så egentligen vi kan dela ut beståndsdelar av den subquery, så vi ser endast bordlägger en gång om möjligheten
-- och därför att den är ett enkelt, kontra, oss kan faktiskt ha den del som subqueryen endast.
välj *
från tblFirstTable T1
Var 1 <�> från tblSecondTable T2
inre sammanfoga tblThirdTable T3 på T2.SecondTablePK = T3.SecondTableFK
var T1.FirstTableKeyA = T2.SecondTableKeyA OCH T1.FirstTableKeyB =T2.SecondTableKeyB)
-- det kan är extra väg att undersöka, men funderare som ger den bäst kapaciteten, och samtalen/kliver van vid får till det pekar:),
Andra lösningar
Hur många skrivar av sidor r där i SQL-server?
OMA och OWA
Missa över mellan GLÅMIGA anslutningar för aktiv/för aktiv på en Cisco Router
ASP.Net tappar skuggar verkställer
Vad är ämna av ”den MAKEFILE” makroen i en makefile?
Ett rengöringsdukundantag uppstod därför att en HTTP 401 - det obehöriga svaret mottogs från okända
Funktionen måste använda en Updateable Query
PHP passerar parametrar till den on-line aktiveringssidan
Ethernetövergångskabel förbinder
döda ett processaa vid styrka, hur kan jag