PostgreSQL แƒแƒœแƒขแƒ˜แƒžแƒแƒขแƒ”แƒ แƒœแƒ”แƒ‘แƒ˜: แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒคแƒแƒกแƒ”แƒ‘แƒ SQL-แƒจแƒ˜

SQL แƒแƒ  แƒแƒ แƒ˜แƒก C++ แƒ“แƒ แƒแƒ แƒช JavaScript. แƒแƒ›แƒ แƒ˜แƒ’แƒแƒ“, แƒšแƒแƒ’แƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ’แƒแƒ›แƒแƒœแƒแƒ—แƒฅแƒ•แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒคแƒแƒกแƒ”แƒ‘แƒ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ“แƒ แƒ”แƒก แƒกแƒแƒ”แƒ แƒ—แƒแƒ“ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ˜แƒ’แƒ˜แƒ•แƒ”:

WHERE fncondX() AND fncondY()

= fncondX() && fncondY()

PostgreSQL แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒ”แƒ’แƒ›แƒ˜แƒก แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒกแƒแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ—แƒ•แƒ˜แƒ—แƒœแƒ”แƒ‘แƒฃแƒ แƒแƒ“ โ€žแƒ’แƒแƒ“แƒแƒแƒฌแƒงแƒแƒกโ€œ แƒ”แƒ™แƒ•แƒ˜แƒ•แƒแƒšแƒ”แƒœแƒขแƒฃแƒ แƒ˜ แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒ˜, แƒแƒ  แƒ’แƒแƒ›แƒแƒ—แƒ•แƒแƒšแƒแƒ— แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒ›แƒ” แƒ›แƒแƒ—แƒ’แƒแƒœแƒ˜ แƒ˜แƒœแƒ“แƒ˜แƒ•แƒ˜แƒ“แƒฃแƒแƒšแƒฃแƒ แƒ˜ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒ”แƒ— แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒก แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒแƒก... แƒ›แƒแƒ™แƒšแƒ”แƒ“, แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ’แƒ–แƒแƒ แƒ•แƒ˜แƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ—, แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒ•แƒ”แƒ  แƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒก แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ, แƒ แƒแƒ›แƒšแƒ˜แƒ—แƒแƒช แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ˜แƒแƒœ (แƒ“แƒ แƒ’แƒแƒ›แƒแƒ˜แƒ—แƒ•แƒšแƒ”แƒ‘แƒ แƒ—แƒฃ แƒแƒ แƒ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒกแƒแƒ”แƒ แƒ—แƒแƒ“) แƒ—แƒแƒœแƒแƒ‘แƒแƒ แƒ˜ แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒ˜.

แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒ—แƒฃ แƒ›แƒแƒ˜แƒœแƒช แƒ’แƒกแƒฃแƒ แƒ— แƒžแƒ แƒ˜แƒแƒ แƒ˜แƒขแƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒ•แƒ, แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒฃแƒšแƒแƒ“ แƒ’แƒแƒฎแƒแƒ“แƒ”แƒ— แƒ”แƒก แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒ˜ แƒแƒ แƒแƒ—แƒแƒœแƒแƒ‘แƒแƒ แƒ˜ แƒžแƒ˜แƒ แƒแƒ‘แƒ˜แƒ— แƒ’แƒแƒ›แƒแƒœแƒแƒ—แƒฅแƒ•แƒแƒ›แƒ”แƒ‘แƒ˜ ะธ แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ”แƒ‘แƒ˜.

PostgreSQL แƒแƒœแƒขแƒ˜แƒžแƒแƒขแƒ”แƒ แƒœแƒ”แƒ‘แƒ˜: แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒคแƒแƒกแƒ”แƒ‘แƒ SQL-แƒจแƒ˜
แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ›แƒแƒ—แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ แƒแƒ แƒ˜แƒก แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ˜ แƒฉแƒ•แƒ”แƒœแƒ˜ VLSI แƒ™แƒแƒ›แƒžแƒšแƒ”แƒฅแƒกแƒ˜, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒฉแƒ•แƒ”แƒœแƒ—แƒ•แƒ˜แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜แƒ, แƒ แƒแƒ› แƒ›แƒแƒ—แƒ–แƒ” แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒก แƒแƒ แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒกแƒฌแƒแƒ แƒแƒ“, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ แƒแƒ“. แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ•แƒฎแƒ”แƒ“แƒแƒ— แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒš แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒก, แƒกแƒแƒ“แƒแƒช แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒจแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒงแƒแƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜ แƒ’แƒแƒ›แƒแƒฎแƒแƒขแƒ•แƒ˜แƒก แƒจแƒ”แƒคแƒแƒกแƒ”แƒ‘แƒแƒจแƒ˜ แƒ“แƒ แƒกแƒแƒ“แƒแƒช แƒฆแƒ˜แƒ แƒก แƒ›แƒแƒ—แƒ˜ แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ แƒแƒ‘แƒ˜แƒก แƒ’แƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ”แƒ‘แƒ.

#0: RTFM

แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ˜แƒ“แƒแƒœ:

แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒจแƒ”แƒคแƒแƒกแƒ”แƒ‘แƒ˜แƒก แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜แƒ, แƒ˜แƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒคแƒ˜แƒฅแƒกแƒ˜แƒ แƒ“แƒ”แƒก แƒ™แƒแƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ˜แƒ— 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: OR/AND แƒฏแƒแƒญแƒ•แƒ˜

SELECT ... WHERE EXISTS(... A) OR EXISTS(... B)

แƒฌแƒ˜แƒœแƒแƒแƒฆแƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒแƒ—, แƒ แƒแƒ› แƒแƒ แƒ˜แƒ•แƒ” EXISTS แƒ›แƒแƒ แƒ—แƒแƒšแƒ˜แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ แƒ˜แƒ•แƒ” แƒแƒฆแƒกแƒ แƒฃแƒšแƒ“แƒ”แƒ‘แƒ.

แƒ›แƒแƒ’แƒ แƒแƒ› แƒ—แƒฃ แƒ“แƒแƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ— แƒ•แƒ˜แƒชแƒ˜แƒ—, แƒ แƒแƒ› แƒ”แƒ แƒ—แƒ˜ แƒ›แƒแƒ—แƒ’แƒแƒœแƒ˜ แƒ‘แƒ”แƒ•แƒ แƒแƒ“ แƒฃแƒคแƒ แƒ แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒแƒ แƒ˜แƒก โ€žแƒ›แƒแƒ แƒ—แƒแƒšแƒ˜โ€œ (แƒแƒœ โ€žแƒชแƒ แƒฃโ€œ - แƒแƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก AND-แƒฏแƒแƒญแƒ•แƒ”แƒ‘แƒ˜) - แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ แƒแƒ’แƒแƒ แƒ›แƒ” "แƒ’แƒแƒ˜แƒ–แƒแƒ แƒ“แƒแƒก แƒ›แƒ˜แƒกแƒ˜ แƒžแƒ แƒ˜แƒแƒ แƒ˜แƒขแƒ”แƒขแƒ˜" แƒ˜แƒกแƒ”, แƒ แƒแƒ› แƒ›แƒ”แƒแƒ แƒ” แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒฎแƒ”แƒš แƒแƒ  แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒก?

แƒ’แƒแƒ›แƒแƒ“แƒ˜แƒก, แƒ แƒแƒ› แƒ”แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ - แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒฃแƒšแƒแƒ“ แƒ›แƒ˜แƒ“แƒ’แƒแƒ›แƒ แƒแƒฎแƒšแƒแƒกแƒแƒ แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก แƒ—แƒ”แƒ›แƒแƒกแƒ—แƒแƒœ PostgreSQL แƒแƒœแƒขแƒ˜แƒžแƒแƒขแƒ”แƒ แƒœแƒ”แƒ‘แƒ˜: แƒ˜แƒจแƒ•แƒ˜แƒแƒ—แƒ˜ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜ แƒแƒฆแƒฌแƒ”แƒ•แƒก JOIN-แƒ˜แƒก แƒจแƒฃแƒ แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒ‘แƒก.

แƒ›แƒแƒ“แƒ˜แƒ—, แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ "แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒขแƒแƒœแƒแƒ— 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: แƒฃแƒขแƒแƒšแƒแƒ‘แƒ แƒแƒ  แƒ˜แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”แƒ‘แƒก NULL-แƒก

แƒ“แƒแƒ•แƒฃแƒจแƒ•แƒแƒ—, แƒ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ 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: bool แƒฃแƒžแƒ˜แƒ แƒแƒขแƒ”แƒกแƒแƒ‘แƒ

แƒ›แƒแƒ“แƒ˜แƒ— แƒ“แƒแƒ•แƒแƒคแƒแƒ แƒ›แƒแƒ— แƒฌแƒงแƒแƒ แƒ:

{... 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

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ