Kezdőoldal » Számítástechnika » Programozás » SQL Server esetén INSERT...

SQL Server esetén INSERT INTO-nál lehet INNER JOIN-t használni?

Figyelt kérdés

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.


2019. okt. 19. 13:54
 1/9 anonim ***** válasza:
13%

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.

2019. okt. 19. 14:00
Hasznos számodra ez a válasz?
 2/9 anonim ***** válasza:
59%
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.
2019. okt. 19. 14:01
Hasznos számodra ez a válasz?
 3/9 anonim ***** válasza:
0%

#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.

2019. okt. 19. 14:44
Hasznos számodra ez a válasz?
 4/9 anonim ***** válasza:
59%
#3 az első mondatodat nem értem, de mi van akkor, ha olyan adat kell neki, amit nem most szúrt be? Akkor az utolsó id nem sokat ér, főleg hogy neki az utolsó kettő kellene (már ha az utolsó 2 az)
2019. okt. 19. 15:27
Hasznos számodra ez a válasz?
 5/9 A kérdező kommentje:

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.

2019. okt. 19. 15:40
 6/9 anonim ***** válasza:
0%

#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.

2019. okt. 19. 18:09
Hasznos számodra ez a válasz?
 7/9 anonim ***** válasza:
59%

"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

2019. okt. 19. 20:00
Hasznos számodra ez a válasz?
 8/9 anonim ***** válasza:

#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.

2019. okt. 19. 21:45
Hasznos számodra ez a válasz?
 9/9 A kérdező kommentje:

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

2019. okt. 19. 22:59

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!