Hirdetés
- sziku69: Szólánc.
- Luck Dragon: Asszociációs játék. :)
- bb0t: Ikea PAX gardrób és a pokol logisztikája
- GoodSpeed: A RAM-válság és annak lehetséges hatásai
- GoodSpeed: Márkaváltás sok-sok év után
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- sziku69: Fűzzük össze a szavakat :)
- ldave: New Game Blitz - 2025
- Real Racing 3 - Freemium csoda
- Gurulunk, WAZE?!
Ú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
- Keressek intel i7-i9!!
- Szép! Lenovo Thinkpad T14s G2 Üzleti "Golyóálló" Laptop 14" -50% i7-1185G7 4Mag 16GB/1TB FHD IPS
- Szép! Lenovo Thinkpad T14s G2 Üzleti "Golyóálló" Laptop 14" -50% i7-1185G7 4Mag 16GB/512GB FHD IPS
- Dell PowerEdge T110 II PC, Xeon E3-1220 v2 CPU, 32 GB DDR3 RAM, 2 x 1 TB SAS HDD
- Lenovo Tab M10 HD 64GB, Kártyafüggetlen, 1 Év Garanciával
- Bomba ár! Lenovo ThinkPad T495 - AMD Ryzen 5 PRO I 8GB I 256GB SSD I 14" FHD I Cam I W11 I Gari!
- TP-Link Archer C1200 Wireless Dual Band Gigabit Router v2.0
- GYÖNYÖRŰ APPLE WATCH ULTRA 2 NATURAL TITANIUM 49MM -1 ÉV GARANCIA - MS3715, 98% AKKUMULÁTOR
- Eladó Oppo A78 5G 4/128GB / 12 hó jótállás
- ÁRGARANCIA!Épített KomPhone Ryzen 7 7800X3D 32/64GB RAM RTX 5070Ti 16GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: ATW Internet Kft.
Város: Budapest
Cég: BroadBit Hungary Kft.
Város: Budakeszi


