Hirdetés
- Poco F6 5G - Turbó Rudi
- Milyen okostelefont vegyek?
- Xiaomi 15 Ultra - kamera, telefon
- Bemutatkozott a Poco X7 és X7 Pro
- Motorola Edge 70 Fusion – stílusosan főznek
- 8000 nit, maradhat? A szaúdiaknál kezd a Honor 600 Pro
- Xiaomi 15 - kicsi telefon nagy energiával
- Motorola Edge 70 - többért kevesebbet
- Xiaomi 15T Pro - a téma nincs lezárva
- Xiaomi 13 Pro - szerencsés szám
Ú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
- LG 27GX790A-B 2K-480HZ-0.03MS 3 ÉV GYÁRTOI GARANCIA
- Szolid RDY2PLAY Gamer PC - Ryzen 2600 // 16GB DDR4 // GTX 1080 // 512SSD + 2x1TB HDD // WIN 11 PRO
- AMD Ryzen 5 1600X AM4
- Eladó Apple iPad (2020) 2. generáció Cellular + WiFi 512 GB
- iPhone 16 128GB gyári független hibátlan 2028.10.20. Apple jótállás
- Samsung Galaxy S22 Ultra 512GB,Használt,Adatkabel,12 hónap garanciával
- Vállalom FRP Lock os telefonok javítását ingyen kiszálással és akár helyszíni javittással
- Lenovo T14 Gen2 Ryzen 5650U - Refurbished - Garancia
- BESZÁMÍTÁS! Lenovo Yoga Book 9 13IMU9 notebook - Ultra7 155U 32GB DDR5 1TB SSD Intel Graphics W11
- GYÖNYÖRŰ iPhone 13 Pro 128GB Sierra Blue -1 ÉV GARANCIA - Kártyafüggetlen, MS4511
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest


