Desktop
Website
Multimedia
Database
Security
Enterprise
Vraag : Het vinden van veelvoudige gelijken treden en ook het hebben van „kleinkind“ verslagen in t-SQL toe
bespreek deze 3 lijsten:
create- lijst tblFirstTable
(
niet ongeldige FirstTablePK int.,
FirstTableKeyA VARCHAR (2),
FirstTableKeyB VARCHAR (6) niet nietig verklaren niet nietig verklaren,
FirstTableAltKeyA VARCHAR (2) niet nietig verklaren,
FirstTableAltKeyB VARCHAR (6) niet nietig verklaren,
FirstTableAltKeyC VARCHAR (1) niet nietig verklaren,
FirstTableAltKeyX VARCHAR (2) niet nietig verklaren,
FirstTableAltKeyY VARCHAR (6) niet nietig verklaren,
FirstTableAltKeyZ VARCHAR (1) niet nietig verklaren,
)
create- lijst tblSecondTable
(
niet ongeldige SecondTablePK int.,
SecondTableKeyA VARCHAR (2) niet verklaart nietig, treden
6) niet ongeldige SecondTableKeyB VARCHAR (,
2) niet ongeldige SecondTableAltKeyX VARCHAR (,
6) niet ongeldige SecondTableAltKeyY VARCHAR (,
1) niet ongeldige SecondTableAltKeyZ VARCHAR (, niet ongeldig
Update_When DATETIME,
50) niet ongeldige Update_By VARCHAR (,
)
create- lijst tblThirdTable
(
niet ongeldige ThirdTablePK int.,
niet ongeldige SecondTableFK int.,
AgentName VARCHAR (20) niet null
)
The tussen tblFirstTable toe en tblSecondTable zijn on
FirstTableKeyA = SecondTableKeyA EN FirstTableKeyB =SecondTableKeyB
For iedereen hiervan zich aansluit bij, voor elke het corresponderen taxeert van {FirstTableAltKeyX, FirstTa
bleAltKeyY
, FirstTabl
eAltKeyZ}
there binnen 1 of meer waarden zijn {SecondTableAltKeyX, Second
TableAltKe
yY, SecondT
ableAltKey
Z}. Dit is belangrijkste condition.
I zou willen slechts verslagen van tblFirsttable selecteren wanneer de bovengenoemde belangrijkste voorwaarde en ook wordt voldaan aan als er kindverslag voor tblSecondTable in tblThirdTable.
Example is:
tblFirstTable
1, „aa“, „BBBBBB“, „CC“, „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“, „II“, „JJJ
JJJ“, „K“, d
atetime, Jo
hn
11, „aa“, „BBBBBB“, zal“, „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, 'br/>22,15 van Roger Portes'<, br/>
*For „aa“ 'van Mike Penguert'<, „BBBBBB“ in tblFirstTable, hebben wij verslagen ook in tblSecondTable, 3 van hen. Zo hebben wij veelvoudige gelijken. Dit is criteria #1. En minstens één van hen heeft een kindverslag in tblThirdTable. Vandaar stellen beide voorwaarden tevreden, en wij zouden het verslag in tblFirstTable in query.
*For „@@“ willen brengen, „######“ in tblFirstTable, hebben wij verslagen ook in tblSecondTable, 2 van hen. Zo hebben wij veelvoudige gelijken. Dit is criteria #1. Maar geen van hen heeft kindverslagen in tblThirdTable; omdat de tweede criteria ontbreekt, moeten wij niet de rij van tblFirstTable.
*For „QQ“ brengen, „WWWWWW“ in tblFirstTable, hebben wij slechts één gelijke in tblSecondTable (geen veelvoudige gelijken). Alhoewel dit een kindverslag heeft (de tweede criteria is voldaan aan), omdat de eerste criteria niet voldaan die is, wij niet de rij van tblFirstTable in query.
how u zouden bouwen het resultaat brengen zullen in code t-SQL wordt gewenst?.
thank you
Antwoord : Het vinden van veelvoudige gelijken treden en ook het hebben van „kleinkind“ verslagen in t-SQL toe
Goed, kan een paar strategieën zijn aangezien u van bovengenoemd kunt zien…
De onderliggende verhoudingen worden opgelost gebruikend een basis van (als wij alle details) nodig hadden:
selecteer T1.*, T2.*, T3.*
van tblFirstTable T1
binnen sluit me aan bij tblSecondTable T2 op T1.FirstTableKeyA = T2.SecondTableKeyA EN T1.FirstTableKeyB =T2.SecondTableKeyB
binnen sluit aan bij tblThirdTable T3 me op T2.SecondTablePK = T3.SecondTableFK
-- Het nadenken zijn er PK en fk's wij veronderstelt het aangewezen indexeren op die.
-- Zo, redelijk om eveneens het indexeren op de kolommen TableKeyA en TableKeyB in hun respectieve lijsten te veronderstellen.
-- Welk middel dat wij redelijk het gelukkige gebruiken kunnen zijn toetreedt.
-- Maar wij hebben slechts werkelijk tellers nodig… Niet details…
selecteer FirstTablePK aangezien FPK, (secondTablePK) als T2_count telt, (thirdTablePK) als T3_count telt
van tblFirstTable T1
binnen sluit me aan bij tblSecondTable T2 op T1.FirstTableKeyA = T2.SecondTableKeyA EN T1.FirstTableKeyB =T2.SecondTableKeyB
binnen sluit aan bij tblThirdTable T3 me op T2.SecondTablePK = T3.SecondTableFK
groep door FirstTablePK
hebbend telling (secondTablePK) > 1
-- Nota, moeten wij geen T3_count tellen werkelijk, omdat binnen zal oplossen het bestaan van minstens 1 ingang in tblThirdTable toetreedt
-- en werkelijk, moeten wij geen T2_count selecteren omdat het Hebben van clausule die telling voor ons doet
-- Maar wij hebben details nodig, zodat de tblFirstTable gegevens moeten terugkrijgen.
selecteer *
van (uitgezochte FirstTablePK als FPK
van tblFirstTable T1
binnen sluit me aan bij tblSecondTable T2 op T1.FirstTableKeyA = T2.SecondTableKeyA EN T1.FirstTableKeyB =T2.SecondTableKeyB
binnen sluit aan bij tblThirdTable T3 me op T2.SecondTablePK = T3.SecondTableFK
groep door FirstTablePK
hebbend telling (secondTablePK) > 1) s
binnen sluit me aan bij tblFirstTable op FPK = FirstTablePK
-- nu, hebben wij subquery voor onze teller en selecteren terug tblFirstTable
-- zo, werkelijk kunnen wij elementen van dat subquery uit verdelen zodat verwijzen wij slechts eens naar lijsten indien mogelijk
-- en omdat het een eenvoudige teller is, kunnen wij dat deel als slechts subquery eigenlijk hebben.
selecteer *
van tblFirstTable T1
Waar 1 <�> van tblSecondTable T2
binnen sluit aan bij tblThirdTable T3 me op T2.SecondTablePK = T3.SecondTableFK
waar T1.FirstTableKeyA = T2.SecondTableKeyA EN T1.FirstTableKeyB =T2.SecondTableKeyB)
-- er zou extra manieren kunnen zijn te onderzoeken, maar denkt dat de beste die prestaties, en de discussies geeft/de stappen worden gebruikt om aan dat punt te krijgen:)
Andere oplossingen
Somebody verzendt emialsvorm mijn hotmailrekening
een programma probeert om het volgende e-mailbericht uit uw naam te verzenden - de Levende post van Vensters
Kleine Statische IP Bedrijfs van de Server 2008 verandering
sharepoint stichting 2010 op met 32 bits?
Word 2003 die - met lijsten, rijen, en cellen werken
Navigeer aan de pagina van een specifiek punt op een gridview
Hyperlink die het diagram/de Tekening activeren
Apple iWeb - hoe te om HTML aan Schijf de website via FTP te publiceren te bewaren of?
sql - datumformaat
Het van een lus voorzien over de tellers van googlekaarten v3