Join

使用 Case 和 JOIN 更新列值

  • April 27, 2017

我有 2 個表“a”和“b”。

表“一”

| 房產 | 元素 | 層 | ..

表“b”

| 房產 | 層 | 材料 | ..

我想要做的是在第一個名為“材料”的表中添加一列,並根據以下規則提供值:

if a.element < 300000 write 80000 else write the value you will get from join tables “a” and “b” on (property and ply)

我為上面寫的是這樣的:

ALTER TABLE a ADD COLUMN Material INTEGER
UPDATE a SET Material = CASE 
   WHEN a.Element &lt;= 300000 
       THEN 80000 
   ELSE b.Material FROM 
       a JOIN b ON (a.PCOMP = b.PCOMP AND a.Ply= b.Ply) 
   END

我正在使用 SQLite 3.14.1

但這並沒有通過。有任何想法嗎?

您的 CASE 幾乎是正確的,但是為了能夠進行單獨的連接,您必須使用子查詢:

UPDATE a
SET Material = CASE 
                WHEN Element &lt;= 300000 
                THEN 80000 
                ELSE (SELECT b.Material
                      FROM b
                      WHERE a.PCOMP = b.PCOMP
                        AND a.Ply = b.Ply)
              END;

似乎我只是遺漏了一些括號,但我重新表述並將問題分解為兩個連續UPDATE的 s。該查詢被接受。這是它現在的樣子:

UPDATE a SET Material = (SELECT b.Material FROM b WHERE (a.PCOMP = b.PCOMP AND a.Ply = b.Ply))

UPDATE a SET Material = 80000 WHERE Element &lt;= 300000

邏輯如下:使用 設置所有內容,JOIN並在稍後階段更新Element值 < 300000 的行。

這很可能遠非最佳解決方案,但它確實有效。

作為記錄,我知道可以將上面的兩個更新語句合併為一個,但我嘗試並得到了它更慢的印象。這有意義嗎?…

引用自:https://dba.stackexchange.com/questions/172039