Sziasztok!
Egy update paranccsal küzdök.
A tábla több sorát szeretném módosítani egy parancsban, konkrét adatok feltöltésével, de a WHERE feltételt csak egy másik tábla bekapcsolásával tudom meghatározni.
Vagy több SET-et kellene belepasszírozni az UPDATE-be vagy CASE utasítással WHEN THEN felsorolva a konkrét eseteket.
A probléma, hogy a WHERE utasításrészben ezt a táblát egy másik táblával is össze kell kapcsolni logikai feltételként. Hogyan kell a másik táblát megadni?
példa itt:
UPDATE tabla1
SET tabla1.email_address =
CASE tabla2.barcode
WHEN 'D010' THEN 'valami1@hely.hu'
WHEN 'D011' THEN 'valami2@hely.hu
END
WHERE
tabla2.barcode IN ('D010','D011')
AND tabla1.id = tabla2.id;
De ez nem jó, mert a tabla2 nincsen megadva.
A tabla2-t hol definiálom?
Esetleg valami ehhez hasonló irány? (Lehet, hogy szintaktikailag nem helyes a kódom, de nincs kéznél Oracle DB nekem.)
UPDATE (
SELECT
tabla1.email_address AS old_email,
tabla2.barcode,
(
CASE tabla2.barcode
WHEN 'D010' THEN 'valami1@hely.hu'
WHEN 'D011' THEN 'valami2@hely.hu'
) AS new_email
INNER JOIN tabla2 ON tabla1.id = tabla2.id
WHERE tabla2.barcode IN ('D010', 'D011')
) t
SET t.old_email = t.new_email
update tabla1 set tabla1.email_address = (
select
CASE tabla2.barcode
WHEN 'D010' THEN 'valami1@hely.hu'
WHEN 'D011' THEN 'valami2@hely.hu
END
from tabla2
where tabla1.id = tabla2.id and tabla2.barcode IN ('D010','D011')
)
where exists (select 1 from tabla2 where tabla1.id = tabla2.id and tabla2.barcode IN ('D010','D011')
)
Szia,Próbáltad a MERGE INTO formát? Valami ilyesmi:
MERGE INTO tabla1 a
USING (SELECT t1.id,
CASE tabla2.barcode
WHEN 'D010' THEN
'valami1@hely.hu'
WHEN 'D011' THEN
'valami2@hely.hu'
END email
FROM tabla1, tabla2
WHERE tabla1.id = tabla2.id AND
tabla2.barcode IN ('D010', 'D011')) b
ON (a.id = b.id)
WHEN MATCHED THEN
UPDATE
SET a.email_address = b.email