ugrás a tartalomhoz

update ... where (select) létezik ilyen?

Totti 1986 · 2009. Aug. 6. (Cs), 19.32
sziasztok!

google-ben nem találtam olyan módszert, h hogy lehetne egy adatbázisban úgy update-elni, hogy a where értéket egy select-tel adom meg.

van egy tábla, amiből ki szeretném olvasni a 100-200. sort, a 400-500. sort és az 1300-1600. sort egy bizonyos "E_ATLAG_J" mező szerint DESC rendezve. vagyis update-tel nem tudom neki megmondani, hogy pontosan ezeket a sorokat irja át, csak ha először egy union-os select-et használok, azt kiolvasom tömbbe, és azt visszairom.
Ezt szeretném elkerülni.
Az E_ATLAG_J érték minden sorban folyamatosan változik, tehát semmiféle képpen nem tudok rámutatni update-nél egy pontos where-rel, csak ha where-nél bele tudnék szőni vhogy egy select-et, ami ezeket leszűri. maga a select már működik, de bele lehet tenni azt egy where-be?

köszi
 
1

WHERE ID IN (SELECT ...)

tisch.david · 2009. Aug. 6. (Cs), 22.27
Szia!

Hogy Számodra ez használható-e, azt a kérdésed alapján nem tudom eldönteni, de a címben említett módon például lehet WHERE-ben SELECT-et használni.

Üdv:
Dávid
2

pontosítok

Totti 1986 · 2009. Aug. 7. (P), 09.09

(SELECT NEV, NAPI, E_ATLAG_J FROM `xyz`  ORDER BY `xyz`.`E_ATLAG_J`  DESC LIMIT 100,100)
UNION
(SELECT NEV, NAPI, E_ATLAG_J FROM `xyz`  ORDER BY `xyz`.`E_ATLAG_J`  DESC LIMIT 400,100)
UNION
(SELECT NEV, NAPI, E_ATLAG_J FROM `xyz`  ORDER BY `xyz`.`E_ATLAG_J`  DESC LIMIT 1300,300)
ez a selectem.
ha ezt kiolvasom és tömbbe írom, majd update-elem, akkor az egy elég terhes kis esemény, vagy ha nem is annyira, de mégis szebben nézne ki, ha az update-nél megadhatnám, hogy where ... és ennek a select-nek az eredménye.
lehet, hogy kezdem kapisgálni, mondjuk, where NEV=(select NEV FROM...) és akkor nem kell a másik 2 mezőt kiolvasni, vagyis akkor már leírom, mire gondolok:
UPDATE xyz SET NAPI='1' WHERE NEV =
(SELECT NEV FROM `xyz`  ORDER BY `xyz`.`E_ATLAG_J`  DESC LIMIT 100,100)  
UNION  
(SELECT NEV FROM `xyz`  ORDER BY `xyz`.`E_ATLAG_J`  DESC LIMIT 400,100)  
UNION  
(SELECT NEV FROM `xyz`  ORDER BY `xyz`.`E_ATLAG_J`  DESC LIMIT 1300,300)
tudom, próbáljam ki, és kiderül, de most nem tudom kipróbálni :(
3

Így ?

krisy · 2009. Aug. 7. (P), 13.41
Esetleg így:
UPDATE xyz SET NAPI='1' WHERE NEV IN
( 
    (SELECT NEV FROM `xyz`  ORDER BY `xyz`.`E_ATLAG_J`  DESC LIMIT 100,100)    
    UNION    
    (SELECT NEV FROM `xyz`  ORDER BY `xyz`.`E_ATLAG_J`  DESC LIMIT 400,100)    
    UNION    
   (SELECT NEV FROM `xyz`  ORDER BY `xyz`.`E_ATLAG_J`  DESC LIMIT 1300,300) 
)
(a "NEV =" helyett "NEV IN"-t írtam, illetve a SELECT-et bezárójeleztem)