首頁 > 資料庫 > mysql教程 > 如何在 PostgreSQL 中高效更新多行 NULL 值?

如何在 PostgreSQL 中高效更新多行 NULL 值?

Barbara Streisand
發布: 2024-12-30 19:39:10
原創
849 人瀏覽過

How to Efficiently Update Multiple Rows with NULL Values in PostgreSQL?

更新具有 NULL 值的多行的挑戰

在 PostgreSQL 中,同時更新多行在處理 NULL 值時可能會遇到挑戰。當使用獨立的 VALUES 表達式時,PostgreSQL 缺乏有關資料類型的信息。因此,非數字文字(包括 NULL 值)需要明確轉換。

在更新查詢中轉換 NULL 值

要解決此問題,請探索以下解決方案:

1。帶有LIMIT 0 的子查詢

UPDATE foo SET x=t.x, y=t.y FROM
(
  (SELECT pkid, x, y FROM foo LIMIT 0)
   UNION ALL
   VALUES
      (1, 20, NULL)  -- no type casts here
    , (2, 50, NULL)
   ) t               -- column names and types are already defined
WHERE  f.pkid = t.pkid;
登入後複製
  • 優點:開銷最小,簡單快速,需要了解相關列名稱
  • 缺點:某些資料類型的類型解析可能會失敗

2。使用LIMIT 0 和SELECT 的子查詢

UPDATE foo SET x=t.x, y=t.y FROM
(
  (SELECT pkid, x, y FROM foo LIMIT 0)
   UNION ALL SELECT 1, 20, NULL
   UNION ALL SELECT 2, 50, NULL
   ) t               -- column names and types are already defined
WHERE  f.pkid = t.pkid;
登入後複製
  • 優點:避免型別解析失敗
  • 缺點:每行語法冗長,比長列表的VALUES 表達式慢

3.每列類型的VALUES表達式

...
FROM  (
   VALUES 
     ((SELECT pkid FROM foo LIMIT 0)
    , (SELECT x    FROM foo LIMIT 0)
    , (SELECT y    FROM foo LIMIT 0))  -- get type for each col individually
   , (1, 20, NULL)
   , (2, 50, NULL)
   ) t (pkid, x, y)  -- columns names not defined yet, only types.
...
登入後複製
  • 優點:通常比#2 更快,相關列的語法較短,僅需要相關列名稱的知識
  • 缺點:冗長的語法對於幾行,可讀性較差

4。具有行類型的VALUES 表達式

UPDATE foo f
SET x = (t.r).x         -- parenthesis needed to make syntax unambiguous
  , y = (t.r).y
FROM (
   VALUES
      ('(1,20,)'::foo)  -- columns need to be in default order of table
     ,('(2,50,)')       -- nothing after the last comma for NULL
   ) t (r)              -- column name for row type
WHERE  f.pkid = (t.r).pkid;
登入後複製
  • 優點:幾行和所有列的最快、最短語法,無需指定列名稱
  • 缺點:語法不為人所知,需要了解預設順序

5 中相關欄位的數量和位置。具有分解行類型的 VALUES 表達式

...
FROM (
   VALUES
      ((NULL::foo).*)  -- decomposed row of values
    , (1, 20, NULL)    -- uniform syntax for all
    , (2, 50, NULL)
   ) t(pkid, x, y)  -- arbitrary column names (I made them match)
...
登入後複製
  • 優點和缺點與 #4 類似,但具有更常見的語法

以上是如何在 PostgreSQL 中高效更新多行 NULL 值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板