Hirdetés
- Fotók, videók mobillal
- Motorola Edge 70 Fusion – stílusosan főznek
- iOS alkalmazások
- Honor Magic8 Pro - bevált recept kölcsönvett hozzávalókkal
- Xiaomi 17 Ultra - jó az optikája
- Távozik az Apple vezérigazgatója
- Huawei P10 - pisztácia nem is volt
- 8000 nit, maradhat? A szaúdiaknál kezd a Honor 600 Pro
- Poco F8 Ultra – forrónaci
- Pura color: színkavalkádba bújt a Huawei legjobb kameratelefonja
Ú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
Hirdetés
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Cáfolta a Microsoft, hogy más gyártók készítenék az új Xboxot
- Xbox tulajok OFF topicja
- Fotók, videók mobillal
- Parkside szerszám kibeszélő
- Milyen billentyűzetet vegyek?
- Warhammer 40.000
- Autós topik
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- Olcsóbb lett a Game Pass Ultimate, de a Call of Dutyért cserébe várni kell
- További aktív témák...
- PlayStation 5 Standard Edition megkímélt, megbízható darab + 3 játék
- Bivaly Lenovo Thinkpad T14 gen6 (Magyar Core Ultra 7 265U 32Gb DDR5 1Tb SSD 33 hó GARANCIA)
- LENOVO Thinkpad 65W USB Type-C adapter
- Apple Watch Ultra 1 (49mm) Titán 98% akku 2 szíj EU modell
- Apple Watch Ultra 1 (49 mm) 87 % Dobozos 3 szíj Szép állapot
- Huawei Watch GT 3 42 mm 6 hónap Garancia Beszámítás Házhozszállítás
- Dell OptiPlex/ Hp EliteDesk /Lenovo ThinkCentre mini, micro PC/ 8.-9.-10.gen/ Számla/garancia
- Lenovo X395 Ryzen 5 pro 3500U, 16GB RAM, SSD, jó akku, számla, garancia
- Samsung Galaxy S24 Ultra 12/256 GB Titanium Gray 6 hónap Garancia Beszámítás Házhozszállítás
- Retro PCI-E videókártyák
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest


