zk24
10.11.11,21:19
Ahojte,

sql tabulka "table1", tri stlpce: fist_name; last_name; personal_code

Values:
Katka; Malá,null
Petra, Jankova, 10
Petra,empty ,20

Q1:
update table1
set personal_code = 02
where first_name = 'petra'
and last_name = 'jankova'

Q2:
update table1
et personal_code = 03
where first_name = 'petra'
and last_name = ''

Ako prosím spojiť tieto dva príkazy do jedného? Ano viem, pustiť dva samostatné príkazy je jednoduchšie, ale v rámci učenia sa to snažím spojiť a táto zdanlivo jednoduchá záležitosť mi robí celkom problémy.

Ďakujem.
zk24
10.11.11,20:21
V Q2 je samozrejme set personal_code... nie et...*
zk24
10.11.11,21:44
solved :)
2009
11.11.11,05:06
Myslím, že sa na to dá použiť príkaz OR. Ešte ma nenapadlo použiť 2 update v jednom príkaze. Nevidím v tom zmysel. Skôr na jeden UPDATE použiť 2 a viac rôznych podmienok. Ak Ti nik neodpovie pozriem sa na to za také 2 hodinky musím niečo odovzdať do 9:00 ;)
zk24
11.11.11,06:15
uz som vyriesila... nie, OR ani AND v tomto pripade nie je vhodne. Aspon jednoduche vlozienie AND medzi dva udpaty nefunguje.

vyriesila som to cez CASE (a vnorene THEN CASE)
zk24
11.11.11,06:18
Vyriesila som to takto. Nevravím že je to efektívna práca v tomto jednoduchom prípade (jasne ze jednoduchsie by bolo zrunnovat dva samostatne update) ale bol to iba píklad, myslím že využiteľnosť CASE (THEN CASE) je celkom fajn.
sthruska
11.11.11,06:24
V praxi sa takéto prípady riešia pomocou parametrov.
zk24
11.11.11,06:28
Privítam akékoľvek nápady.... update hodnoty stlpca za podmienok hodnot v prvom a druhom stlpci (a viacej riadkov naraz samozrejme).

Privítam príklady a nápady ako sa to dá ešte vyriešiť.

Ďakujem.
2009
11.11.11,06:44
uz som vyriesila... nie, OR ani AND v tomto pripade nie je vhodne. Aspon jednoduche vlozienie AND medzi dva udpaty nefunguje.

vyriesila som to cez CASE (a vnorene THEN CASE)

Cez CASE? Priložíš to prosím? Zaujímalo by ma ako si ti to podarilo lebo sa odvolávaš na dva stĺpce a updatovať chceš tretí. Alebo si CASE použila v procedúre? Ja som sa snažila použiť UNION ALL ale to asi funguje iba na selecty. Čo už..
2009
11.11.11,06:47
Vyriesila som to takto. Nevravím že je to efektívna práca v tomto jednoduchom prípade (jasne ze jednoduchsie by bolo zrunnovat dva samostatne update) ale bol to iba píklad, myslím že využiteľnosť CASE (THEN CASE) je celkom fajn.

Hups sorry otvorila som si tému a na pol hodinku som odbehla. Neviem .....takto pracovať nie je asi praktické s väčšou tabuľkou.
zk24
11.11.11,06:52
Cez CASE? Priložíš to prosím? Zaujímalo by ma ako si ti to podarilo lebo sa odvolávaš na dva stĺpce a updatovať chceš tretí. Alebo si CASE použila v procedúre? Ja som sa snažila použiť UNION ALL ale to asi funguje iba na selecty. Čo už..

V príspevku 6 som priložila obrázok - kde je vidno aj výsledná tabuľka aj query.
2009
11.11.11,06:55
uz som vyriesila... nie, OR ani AND v tomto pripade nie je vhodne. Aspon jednoduche vlozienie AND medzi dva udpaty nefunguje.

vyriesila som to cez CASE (a vnorene THEN CASE)

Pozor
AND = a zároveň
OR = alebo
zk24
11.11.11,06:56
To mi je jasné... ale ani jeden z príkazov, ani AND, ani OR neriešil moju situaciu.
zk24
11.11.11,06:58
Nemyslim tým že AND sa mi nepáči, že chcem to inač. s AND mi to nefunguje, to som skusala ako prve :D Ked vložím AND medzi dva update príkazy s dvomi where podmienkami tak to nezbehne, vyhodi chybu.
srska
11.11.11,07:09
ja žasnem, tak takú debatu by som nečakal. smekám:)
sthruska
11.11.11,07:12
Tak na to by som určite išiel pomocou tých parametrov. Samozrejme v cykle.
Takýto update sa tak či tak nedá urobiť jedným vrzom.
2009
11.11.11,07:14
Spýtala som sa kolegu z Besetu. Odpoveď:
Evicka,
je to nezmysel, nemozes to spajat s OR, musis to spustit za sebou ako 2 nezavisle updaty.
Nuž pravda je, že ma v živote (hi teda za tých 16 rokov čo tu robím)nenapadlo spojiť dva updaty v jednom príkaze. To už je na procedúru. Dve rôzne podmienky v jednom update zadávam bežne.
zk24
11.11.11,07:16
jasné Evi, ja to všetko chápem.

Je to proste len príklad, cvičenie. A hľadala som riešenie. Neexistuje správne a nesprávne. Proste aby sa to dalo cez "jedno F5" zrunnovať.

Ja som vymyslela CASE a vnorené THEN CASE... nevravim ze naefektivnejšie... ale zafungovalo... :)
zk24
11.11.11,07:16
Tak na to by som určite išiel pomocou tých parametrov. Samozrejme v cykle.
Takýto update sa tak či tak nedá urobiť jedným vrzom.

Vieš mi o tom povedať viac?
2009
11.11.11,07:18
jasné Evi, ja to všetko chápem.

Je to proste len príklad, cvičenie. A hľadala som riešenie. Neexistuje správne a nesprávne. Proste aby sa to dalo cez "jedno F5" zrunnovať.

Ja som vymyslela CASE a vnorené THEN CASE... nevravim ze naefektivnejšie... ale zafungovalo... :)

Šikulka. Dám si túto tému do sledovania možno niečomu priučím. :rolleyes:
2009
11.11.11,07:36
Vyriesila som to takto. Nevravím že je to efektívna práca v tomto jednoduchom prípade (jasne ze jednoduchsie by bolo zrunnovat dva samostatne update) ale bol to iba píklad, myslím že využiteľnosť CASE (THEN CASE) je celkom fajn.

Pozrela som si lepšie Tvoj update. Je trošku nebezpečný. Narýchlo som vymyslela príklad. Prispôsob si ho. Ozaj iba narýchlo lebo je piatok a keď chcem odísť z roboty o 14:00 musím makať

update table1
set personal_code = (case WHEN last_name ='jankova' THEN 02 WHEN 'hubata' THEN 03
END)
where last_name in ('jankova','hubata');

Where klauzula je dolezita, aby ti neudatoval ine riadky v tabulke table1, ktore nemaju tieto hodnoty ('jankova','hubata') na NULL!
2009
11.11.11,07:36
alebo miesto CASE použi DECODE
zk24
11.11.11,07:45
Idem skúšať :)
sthruska
11.11.11,08:36
Je to pre MS Access v Delphi 7. Ako návod by malo stačiť

dMain.cmd1.CommandType := cmdText;
dMain.cmd1.CommandText:= 'UPDATE EscapeRoutes'
+' SET IsNew = :p0'
+' WHERE FSFK = :p1';

while not MyQry.Eof do
begin
dMain.cmd1.Parameters[0].Value := fMain.chkIsNew.Checked;
dMain.cmd1.Parameters[1].Value := MyQry.FieldValues['FireSectionID'];
dMain.cmd1.Execute;
MyQry.Next;
end;
zk24
11.11.11,08:45
Tak toto je na mňa trošku moc... ale doučím sa :)
sthruska
11.11.11,09:37
Prečo?
Prvá časť len definuje parametre. Prvé dva riadky si nevšímaj.

+' SET IsNew = :p0'
+' WHERE FSFK = :p1';
+' SET IsNew = :p0'
+' WHERE FSFK = :p1';
SET IsNew = :p0'
SET IsNew = :p0'
SET IsNew = :p0' SET IsNew = :p0' UPDATE EscapeRoutes SET IsNew = :p0 WHERE FSFK = :p1

V cykle postupne dosadzuješ hodnoty pre parametre a spustíš samotný príkaz SQL.
sthruska
11.11.11,09:39
Prečo?
Prvá časť len definuje parametre. Prvé dva riadky si nevšímaj.

UPDATE EscapeRoutes SET IsNew = :p0 WHERE FSFK = :p1

V cykle postupne dosadzuješ hodnoty pre parametre a spustíš samotný príkaz SQL.

Nejako to blbne :(
marjankaj
13.11.11,08:51
Vyriesila som to takto. Nevravím že je to efektívna práca v tomto jednoduchom prípade (jasne ze jednoduchsie by bolo zrunnovat dva samostatne update) ale bol to iba píklad, myslím že využiteľnosť CASE (THEN CASE) je celkom fajn.

A nie je jednoduchšie ten Personal_code zmeniť manuálne v tabuľke, ako takto kvôli každej jednej zmene písať kód?:eek:
sthruska
13.11.11,09:32
Čo môže urobiť počítač tak nech to robí.
Písala, že sa jedná o cvičenie. Ďalšia vec je, že to chce asi hromadne.
Kód sa generuje automaticky - bez zásahu obsluhy.

Všimol som si jednu vec

update table1
Set personal_code = 03
where first_name = 'petra'
and last_name = ''

Si si istá posledným riadkom? Mne tam pasuje "null". V každom prípade si to musíš správne ošetriť. Záleží od zdroja z ktorého čerpáš hodnoty. Z formulára to môže byť ". Z DB určite "null".
marjankaj
13.11.11,09:45
Čo môže urobiť počítač tak nech to robí.
Písala, že sa jedná o cvičenie. Ďalšia vec je, že to chce asi hromadne.
Kód sa generuje automaticky - bez zásahu obsluhy.
Ale niekto predsa musí určiť aká hodnota Personal_code sa má priradiť.
Všimol som si jednu vec

update table1
Set personal_code = 03
where first_name = 'petra'
and last_name = ''

Si si istá posledným riadkom? Mne tam pasuje "null". V každom prípade si to musíš správne ošetriť. Záleží od zdroja z ktorého čerpáš hodnoty. Z formulára to môže byť ". Z DB určite "null".

No ak mám vypisovať takýto kod


Set personal_code = 03
where first_name = 'petra'

namiesto "03" v príslušnom riadku, tak tá automatizácia je akosi náročnejšia.

Takto by som to robil iba pri zmene niekoľkých údajov a nie hromadne. A podľa mena? A čo keď budú rovnaké mená aj priezviská. Volil by som jednoznačnejšie kritérium. Napríklad primárny kľúč.