SQL C++ рдирд╣реАрдВ рд╣реИ, рди рд╣реА рдпрд╣ JavaScript рд╣реИред рдЗрд╕рд▓рд┐рдП, рддрд╛рд░реНрдХрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдЕрд▓рдЧ рд╣реИ, рдФрд░ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рд╣реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ:
WHERE fncondX() AND fncondY()
= fncondX() && fncondY()
PostgreSQL рдХреНрд╡реЗрд░реА рдХреА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЬрдирд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп
рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЗрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдЕрд╕рдорд╛рди рдмрдирд╛рдПрдВ рд╕рд╢рд░реНрдд рдХреЗ рд╕рд╛рде
рдбреЗрдЯрд╛ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реА рдЖрдзрд╛рд░ рд╣реИ
#0: рдЖрд░рдЯреАрдПрдлрдПрдо
рд╢реБрд░реБрдЖрдд
рдЬрдм рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд╛ рдХреНрд░рдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ, рддреЛ рдЗрд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
CASE
. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рд╡рд╛рдХреНрдп рдореЗрдВ рд╢реВрдиреНрдп рд╕реЗ рд╡рд┐рднрд╛рдЬрди рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдпрд╣ рддрд░реАрдХрд╛WHERE
рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп:SELECT ... WHERE x > 0 AND y/x > 1.5;
рд╕реБрд░рдХреНрд╖рд┐рдд рд╡рд┐рдХрд▓реНрдк:
SELECT ... WHERE CASE WHEN x > 0 THEN y/x > 1.5 ELSE false END;
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдирд┐рд░реНрдорд╛рдг
CASE
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЕрдиреБрдХреВрд▓рди рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рддрднреА рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдЖрд╡рд╢реНрдпрдХ рд╣реЛред
#1: рдЯреНрд░рд┐рдЧрд░ рд╕реНрдерд┐рддрд┐
BEGIN
IF cond(NEW.fld) AND EXISTS(SELECT ...) THEN
...
END IF;
RETURN NEW;
END;
рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди... рдХреЛрдИ рднреА рд╡рд╛рджрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рдХрд┐ рдирд┐рд╡реЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ SELECT
рдпрджрд┐ рдкрд╣рд▓реА рд╢рд░реНрдд рдЭреВрдареА рд╣реИ рддреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВ рдиреЗрд╕реНрдЯ IF
:
BEGIN
IF cond(NEW.fld) THEN
IF EXISTS(SELECT ...) THEN
...
END IF;
END IF;
RETURN NEW;
END;
рдЖрдЗрдП рдЕрдм рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦреЗрдВ - рдЯреНрд░рд┐рдЧрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкреВрд░рд╛ рд╢рд░реАрд░ "рд▓рд┐рдкрдЯреЗ" рдореЗрдВ рдирд┐рдХрд▓рд╛ IF
. рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдЪреАрдЬрд╝ рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддреА рд╣реИ WHEN
-рд╕реНрдерд┐рддрд┐рдпрд╛рдБ
BEGIN
IF EXISTS(SELECT ...) THEN
...
END IF;
RETURN NEW;
END;
...
CREATE TRIGGER ...
WHEN cond(NEW.fld);
рдпрджрд┐ рд╕реНрдерд┐рддрд┐ рдЧрд▓рдд рд╣реИ рддреЛ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рдЧрд╛рд░рдВрдЯреА рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
#2: рдпрд╛/рддрдерд╛ рд╢реНрд░реГрдВрдЦрд▓рд╛
SELECT ... WHERE EXISTS(... A) OR EXISTS(... B)
рдЕрдиреНрдпрдерд╛, рдпрд╣ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ EXISTS
рд╕рдЪ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рджреЛрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛.
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ "рд╕рддреНрдп" рд╣реИ (рдпрд╛ "рдЭреВрдард╛" - рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП AND
-рдЪреЗрди) - рдХреНрдпрд╛ рдХрд┐рд╕реА рддрд░рд╣ "рдЕрдкрдиреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдмрдврд╝рд╛рдирд╛" рд╕рдВрднрд╡ рд╣реИ рддрд╛рдХрд┐ рджреВрд╕рд░рд╛ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рди рд╣реЛ?
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ - рдПрд▓реНрдЧреЛрд░рд┐рдердо рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓реЗрдЦ рдХреЗ рд╡рд┐рд╖рдп рдХреЗ рдХрд░реАрдм рд╣реИ
рдЖрдЗрдП рдЗрди рджреЛрдиреЛрдВ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ "CASE рдХреЗ рдЕрдВрддрд░реНрдЧрдд рд░рдЦреЗрдВ":
SELECT ...
WHERE
CASE
WHEN EXISTS(... A) THEN TRUE
WHEN EXISTS(... B) THEN TRUE
END
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдордиреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ ELSE
-рдореВрд▓реНрдп, рдЕрд░реНрдерд╛рдд, рдпрджрд┐ рджреЛрдиреЛрдВ рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рдЧрд▓рдд рд╣реИрдВ CASE
рд▓реМрдЯ рдЖрдПрдЧрд╛ NULL
, рдЬрд┐рд╕рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИ FALSE
╨▓ WHERE
- рд╕реНрдерд┐рддрд┐рдпрд╛рдБред
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рд╕реНрд╡рд╛рдж рдФрд░ рд░рдВрдЧ рдХреЗ рд▓рд┐рдП:
SELECT ...
WHERE
CASE
WHEN NOT EXISTS(... A) THEN EXISTS(... B)
ELSE TRUE
END
#3: рд╢рд░реНрддреЗрдВ рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ [рдирд╣реАрдВ]
рд╣рдордиреЗ рдЗрд╕ рдЯреНрд░рд┐рдЧрд░ рдХреЗ "рдЕрдЬреАрдм" рдЯреНрд░рд┐рдЧрд░ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рджреЛ рджрд┐рди рдмрд┐рддрд╛рдП - рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХреНрдпреЛрдВред
рд╕реНрд░реЛрдд:
IF( NEW."╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В_" is null or NEW."╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В_" = (select '"╨Ъ╨╛╨╝╨┐╨╗╨╡╨║╤В"'::regclass::oid) or NEW."╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В_" = (select to_regclass('"╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨Я╨╛╨Ч╨░╤А╨┐╨╗╨░╤В╨╡"')::oid)
AND ( OLD."╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨Э╨░╤И╨░╨Ю╤А╨│╨░╨╜╨╕╨╖╨░╤Ж╨╕╤П" <> NEW."╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨Э╨░╤И╨░╨Ю╤А╨│╨░╨╜╨╕╨╖╨░╤Ж╨╕╤П"
OR OLD."╨г╨┤╨░╨╗╨╡╨╜" <> NEW."╨г╨┤╨░╨╗╨╡╨╜"
OR OLD."╨Ф╨░╤В╨░" <> NEW."╨Ф╨░╤В╨░"
OR OLD."╨Т╤А╨╡╨╝╤П" <> NEW."╨Т╤А╨╡╨╝╤П"
OR OLD."╨Ы╨╕╤Ж╨╛╨б╨╛╨╖╨┤╨░╨╗" <> NEW."╨Ы╨╕╤Ж╨╛╨б╨╛╨╖╨┤╨░╨╗" ) ) THEN ...
рд╕рдорд╕реНрдпрд╛ #1: рдЕрд╕рдорд╛рдирддрд╛ рд╢реВрдиреНрдп рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдмрдирддреА
рдЪрд▓рд┐рдП рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдмрдХреБрдЫ OLD
-рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдорд╣рддреНрд╡ рдерд╛ NULL
. рдХреНрдпрд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛?
SELECT NULL <> 1 OR NULL <> 2;
-- NULL
рдФрд░ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рджреГрд╖реНрдЯрд┐ рд╕реЗ NULL
рдмрд░рд╛рдмрд░ FALSE
, рдЬреИрд╕рд╛ рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╣реИред
рд╕рдорд╛рдзрд╛рди: рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ IS DISTINCT FROM
ROW
-рдСрдкрд░реЗрдЯрд░, рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рд╕рдВрдкреВрд░реНрдг рд░рд┐рдХреЙрд░реНрдб рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛:
SELECT (NULL, NULL) IS DISTINCT FROM (1, 2);
-- TRUE
рд╕рдорд╕реНрдпрд╛ рд╕рдВрдЦреНрдпрд╛ 2: рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рднрд┐рдиреНрди-рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдХреЗ рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ:
NEW."╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В_" = (select '"╨Ъ╨╛╨╝╨┐╨╗╨╡╨║╤В"'::regclass::oid)
NEW."╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В_" = (select to_regclass('"╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨Я╨╛╨Ч╨░╤А╨┐╨╗╨░╤В╨╡"')::oid)
рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд╡реЗрд╢ рдХреНрдпреЛрдВ рд╣реИрдВ? SELECT
? рдПрдХ рд╕рдорд╛рд░реЛрд╣ to_regclass
? рдпрд╣ рдЕрд▓рдЧ рдХреНрдпреЛрдВ рд╣реИ...
рдЖрдЗрдП рдареАрдХ рдХрд░реЗрдВ:
NEW."╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В_" = '"╨Ъ╨╛╨╝╨┐╨╗╨╡╨║╤В"'::regclass::oid
NEW."╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В_" = '"╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨Я╨╛╨Ч╨░╤А╨┐╨╗╨░╤В╨╡"'::regclass::oid
рд╕рдорд╕реНрдпрд╛ #3: рдмреВрд▓ рдкреНрд░рд╛рдердорд┐рдХрддрд╛
рдЖрдЗрдП рд╕реНрд░реЛрдд рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░реЗрдВ:
{... IS NULL} OR
{... ╨Ъ╨╛╨╝╨┐╨╗╨╡╨║╤В} OR
{... ╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨Я╨╛╨Ч╨░╤А╨┐╨╗╨░╤В╨╡} AND
( {... ╨╜╨╡╤А╨░╨▓╨╡╨╜╤Б╤В╨▓╨░} )
рдЙрдлрд╝... рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдкрд╣рд▓реА рджреЛ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЗ рд╕рддреНрдп рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдкреВрд░реА рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ TRUE
, рдЕрд╕рдорд╛рдирддрд╛рдУрдВ рдХреА рдкрд░рд╡рд╛рд╣ рди рдХрд░рддреЗ рд╣реБрдПред рдФрд░ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдЬреИрд╕рд╛ рд╣рдо рдЪрд╛рд╣рддреЗ рдереЗред
рдЖрдЗрдП рдареАрдХ рдХрд░реЗрдВ:
(
{... IS NULL} OR
{... ╨Ъ╨╛╨╝╨┐╨╗╨╡╨║╤В} OR
{... ╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨Я╨╛╨Ч╨░╤А╨┐╨╗╨░╤В╨╡}
) AND
( {... ╨╜╨╡╤А╨░╨▓╨╡╨╜╤Б╤В╨▓╨░} )
рд╕рдорд╕реНрдпрд╛ #4 (рдЫреЛрдЯреА): рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рдпрд╛ рд╕реНрдерд┐рддрд┐
рджрд░рдЕрд╕рд▓, рд╣рдореЗрдВ рдирдВрдмрд░ 3 рдореЗрдВ рджрд┐рдХреНрдХрдд рдЗрд╕рд▓рд┐рдП рд╣реБрдИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣рд╛рдВ рддреАрди рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдереАрдВред рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдмрдЬрд╛рдп, рдЖрдк рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдПрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ coalesce ... IN
:
coalesce(NEW."╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В_"::text, '') IN ('', '"╨Ъ╨╛╨╝╨┐╨╗╨╡╨║╤В"', '"╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨Я╨╛╨Ч╨░╤А╨┐╨╗╨░╤В╨╡"')
рдФрд░ рд╣рдо рдЗрд╕реАрд▓рд┐рдП NULL
"рдкрдХрдбрд╝реЛ", рдФрд░ рдЬрдЯрд┐рд▓ OR
рдЖрдкрдХреЛ рдХреЛрд╖реНрдардХреЛрдВ рдХреЗ рд╕рд╛рде рдЭрдВрдЭрдЯ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░
рдЖрдЗрдП рдЙрд╕реЗ рдареАрдХ рдХрд░реЗрдВ рдЬреЛ рд╣рдореЗрдВ рдорд┐рд▓рд╛:
IF (
coalesce(NEW."╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В_"::text, '') IN ('', '"╨Ъ╨╛╨╝╨┐╨╗╨╡╨║╤В"', '"╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨Я╨╛╨Ч╨░╤А╨┐╨╗╨░╤В╨╡"') AND
(
OLD."╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨Э╨░╤И╨░╨Ю╤А╨│╨░╨╜╨╕╨╖╨░╤Ж╨╕╤П"
, OLD."╨г╨┤╨░╨╗╨╡╨╜"
, OLD."╨Ф╨░╤В╨░"
, OLD."╨Т╤А╨╡╨╝╤П"
, OLD."╨Ы╨╕╤Ж╨╛╨б╨╛╨╖╨┤╨░╨╗"
) IS DISTINCT FROM (
NEW."╨Ф╨╛╨║╤Г╨╝╨╡╨╜╤В╨Э╨░╤И╨░╨Ю╤А╨│╨░╨╜╨╕╨╖╨░╤Ж╨╕╤П"
, NEW."╨г╨┤╨░╨╗╨╡╨╜"
, NEW."╨Ф╨░╤В╨░"
, NEW."╨Т╤А╨╡╨╝╤П"
, NEW."╨Ы╨╕╤Ж╨╛╨б╨╛╨╖╨┤╨░╨╗"
)
) THEN ...
рдФрд░ рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЗрд╕ рдЯреНрд░рд┐рдЧрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдореЗрдВ рд╣реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ UPDATE
рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд╛рд░рдг рдЯреНрд░рд┐рдЧрд░ OLD/NEW
рдКрдкрд░реА рд╕реНрддрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рддреЛ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЖрдо рддреМрд░ рдкрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ WHEN
-рд╕реНрдерд┐рддрд┐ рдЬреИрд╕рд╛ рдХрд┐ #1 рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ...
рд╕реНрд░реЛрдд: www.habr.com