Hirdetés
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- Pengeélen
- Meggyi001: Áram nélkül....méltóság nélkül.....
- Luck Dragon: Asszociációs játék. :)
- ricsi99: 6. Genes alaplap tündöklése kontra MS/Zintel korlátozásai
- sziku69: Fűzzük össze a szavakat :)
- Lalikiraly: Macbook NEO 2
- sziku69: Szólánc.
- hcl: Olympus E-PL1 nyomozás
- Elektromos rásegítésű kerékpárok
Új hozzászólás Aktív témák
-
lanszelot
addikt
Hello,
Hogy kell létrehozni táblát úgy, hogy az id-je egy másik tábla id-je legyen? (Utolsó előtti sor.)CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
username TEXT NOT NULL,
email TEXT)
CREATE TABLE IF NOT EXISTS order (
id FROM users(id),
address TEXT) -
nyunyu
félisten
Hja, ha SQL Servert használsz akkor próbálkozhatsz az archaikus Teradata upsert szintaxissal is, hátha megeszi:
(Elvileg 2008R2-vel próbálták átcsábítani a Teradata DWH júzereit, aztán a legacy kód migráció megkönnyítésére implementálták a Teradata szintaxisát is.)update cc
set cc.cust_partnerkod = cc.cust_partnerkod + x.rn
from cikktorzs_customer cc,
(select id, row_number() over (order by id) rn
from cikktorzs_customer
where cust_partnerkod = 200000) x
where cc.id = x.id;(Hmm, MS csak a SET és a WHERE között engedi a FROM utáni tábla felsorolást? Teradatában a SET elé is lehetett írni, sőt legtöbbször úgy írták.)
De a feljebb írt mergenek biztosan működnie kéne, az a több táblát összefésülő műveletek szabványos írásmódja.
FROM clause nagyon nem szabványos az update szintaxisokban, nem sok DB ismeri, kezeli.
(Oracle alatt meg se próbáld!) -
nyunyu
félisten
""Sok fejfájástól megment, ha több tábla joinja alapján kell updatelni egy táblát..." - de ez egy tábla ..."
Meg kell határoznod, hogy
- melyik sorazonosítóhoz
- milyen értéket szeretnél rendelni.
Ezekből létrejön sok (id, érték) páros, ami kvázi egy újabb tábla/nézet/alselect, ezt kell összefésülnöd az eredeti tábláddal, az meg join művelet. -
nyunyu
félisten
azért, mert egy rekordhoz egyszer kell lefusson, de az első update után változik az adatnézet, ha akkor újra kiértékelődik a belső select, akkor már az eggyel növelt értékű rekordot kellene (mármint a logikám szerint) megtalálnia.
Írtál egy alselectet, aminek összesen 1 rekord az eredménye, és értelmes join feltétel híján sikerült Deschartes szoroznod a tábláddal, vagyis minden sorhoz ugyanazt az 1 értéket rendelte hozzá.
Ha az alselectednek nem 1 sor lett volna az eredménye, akkor DB errort kaptál volna, mert egy mezőnek nem lehet egyszerre több értéket adni.
-
nyunyu
félisten
Javaslom a szabványos merge szintaxis tanulmányozását.
Sok fejfájástól megment, ha több tábla joinja alapján kell updatelni egy táblát...
Egyébként már az updateedet sem értem, miért kéne többször lefutnia az alselectnek, ha egyre limitáltad a visszaadható eredmény számát?
Meg a join feltétel is kompletten hiányzik, ami alapján leválogatnád, hogy melyik rossz sorhoz milyen jó partnerkód tartozna.Ez most pont azt csinálja, hogy leválogatja a legnagyobb partnerkódot, és annyi+1-et ráupdatel minden 200000-es sorra.

Ezzel maximum annyit tudsz csinálni, hogy beteszed egy kurzorba az összes 200000-es sort, aztán egyesével végigiterálva rajtuk mindig eggyel nagyobb értékkel updateled őket.
Vagy valami nagyon elborult merget írsz, ami besorszámozza a sorokat, aztán az alapján updatel:
merge into cikktorzs_customer u
using (select cc.id, cc.cust_partnerkod, row_number() over (order by cc.id) rn
from cikktorzs_customer cc
where cc.cust_partnerkod = 200000) x
on (u.id = x.id)
when matched
then update set u.cust_partnerkod = x.cust_partnerkod + x.rn;
Új hozzászólás Aktív témák
- LENOVO ThinkPad T460,14,HD,i5-6300U,8GB RAM,256GB SSD,WIN11,DUPLA akku
- Rackszekrény - APC NetShelter SX 48U, Fekete, 2258H x 600W x 1070D mm TAA
- Újszerű Asus ROG Flow i9-13900H NVIDIA RTX4050 ROG Nebula QHD+ DCI-P3 Pantone gamer laptop tablet
- Új Fehér Gamer Gép - ASRock X870, Ryzen 7 9800X3D, 64GB DDR5, RX 9070 XT 16GB, 1TB SSD, 1000W
- Intel Xeon E3-1265L v3 (4 mag / 8 szál / 45W ) // 32 GB DDR3 (4X8GB) // ASRock Z97M Anniversary
- HP EliteBook 830 G8 13,3" i7 -1185 G7, 8-16GB RAM, SSD, jó akku, számla, 6 hó gar
- HP EliteBook 655 G10 15" Ryzen 5 PRO 7530U 32GB RAM Garancia 2028.02.27.
- Apple iPad Air 5th 64GB 100% (1év Garancia)
- BESZÁMÍTÁS! ASUS ProArt RTX 4060 8GB videokártya garanciával hibátlan működéssel
- 27% - LG UltraFine 27UQ850V-W 4K IPS Monitor! 3840x2160 / 60Hz / FreeSync
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

