SQL Server esetén INSERT INTO-nál lehet INNER JOIN-t használni?
Ilyesmi az adatbázis eddigi szerkezete:
ElsőTábla
__ElsőID, elsődleges kulcs
__ElsőÉrték
MásodikTábla
__MásodikID, elsődleges kulcs
__MásodikÉrték
HarmadikTábla
__HarmadikID, elsődleges kulcs
__ElsőID,
__MásodikID,
__HarmadikTáblaÉrtéke1,
__HarmadikTáblaÉrtéke2
stb-stb.
A harmadik táblába kellene beilleszteni (az első kettőt békénhagyva) úgy, hogy ElsőÉrték van meg, de ElsőID kellene a HarmadikTáblába, MásodikÉrték van meg, de MásodikID kellene.
Ha nem INSERT INTO lenne, hanem SELECT, akkor pillanatok alatt megoldanám INNER JOIN-nal.
Rákerestem, de eddig konkrétan nem erre a problémára találtam megoldásokat. NEM több táblába szeretnék beilleszteni, hanem egybe, csak másik két tábla adatainak felhasználásával.
Idegen kulcs jelenleg nincs.
Pl. Egymásba ágyazott parancsokkal.
INSERT INTO HarmadikTábla VALUES(NULL,SELECT ElsőID FROM ElsőTábla WHERE ElsőÉrték = "Janiagáton"... stb.
#1 Egyszer tartalmazza két sor ugyanazt az értéket. Egyszer.
A szép megoldás erre a problémára az, hogy használod a beépített függvényeket, az utolsó beszúrt ID lekérésére
(Microsoft SQL Server estén @@IDENTITY, IDENT_CURRENT(), SCOPE_IDENTITY()), ezt megcsinálod ElsőTábla és MásodikTábla esetén, letárolod őket, aztán már tudod miket kell HarmadikTábla-ba beszúrni.
Az első megoldással sikerült. :) Jó, ha nem is szép, de mindenképp kézenfekvő, így érdekes, hogy nem jutott eszembe.
Az első és a második táblákban egyenként kb 10 rekord van, az egyikben bővülni fog. A harmadikba ezekből bármelyik ID kellhet.
#4 '...WHERE ElsőÉrték = "Janiagáton"...'
Unique az ElsőÉrték oszlop? Nem? Akkor megismétlem amit mondtam. Egyszer legyen ugyanaz az érték két sorban. Máris nem fog működni.
Amúgy meg krédező, ha nem egyszerre akarod a három táblát feltölteni, akkor komolyan nem értem mi a problémád egyáltalán, nyilván van valami érték ami alapján eléred az első tábla tartalmát (és REMÉLEHETŐLEG unique érték(pár)), onnantól megvan az ID, és azt berakhatod a harmadikba. Azért nem találtál választ erre a problémára, mert itt nincs probléma, a legalapvetőbb SQL funckionalitásokról beszélünk. Beraksz egy táblába egy értéket, amit valami alapján lekérdeztél. Amit #1 írt az annyit csinál ennek a tetejébe, hogy összesűríti egyetlen SQL querybe, de ez már nem a rpobléma megoldása, csak a megoldás optimalizálása. Nem is értem, hogy egyáltalán miről beszéltél Inner JOIN-okkal, ez egy mezei INSERT.
"De szerintem egyszerűbb, ha előbb lekérdezed az első és második táblá értékét, majd a kapott eredményt használod a beszúrásnál."
ja csak nem hagyod szegény rendszert normálisan optimalizálni
#7 na látod ez igaz. :)
#6 nyilván a táblázat adatainak függvényében kell megadni a feltételt, hogy csak egy eredmény legyen. Ennél azért jóval kevésbé működőképes az a megoldás (?) amit te írtál.
Van nekem:
ElsőÉrték
MásodikÉrték
HarmadikTáblaÉrtéke1,
HarmadikTáblaÉrtéke2
Az elsődleges kulcsok a saját táblájukban int identity-k.
Viszont a HarmadikTáblába beszúráskor ElsőÉrtékem van, de nem a string (varchar) maga kell, hanem az ElsőTáblában hozzátartozó ID-ja.
Az első megoldása számomra kézenfekvőnek tűnik és működött is.
ElsőTáblában és MásodikTáblában feltételezhetjük, hogy minden érték egyszer szerepel. Tehát nincs "alma" 10-es és 15-ös ID-val is. Viszont jelen helyzetemben nem okozna gondot a továbbiakban. A legnagyobb gond maga az lenne, ha az "alma" 2-szer szerepelne az ElsőTáblában
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!