Join
使用 Case 和 JOIN 更新列值
我有 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 <= 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 <= 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 <= 300000
邏輯如下:使用 設置所有內容,
JOIN
並在稍後階段更新Element
值 < 300000 的行。這很可能遠非最佳解決方案,但它確實有效。
作為記錄,我知道可以將上面的兩個更新語句合併為一個,但我嘗試並得到了它更慢的印象。這有意義嗎?…