我的UPDATE語句的線沿線的雲:SQL - 使用CASE語句更新,是否需要多次重複相同的CASE?
UPDATE customer
SET forenames=ot.forenames,
surname =
CASE WHEN ot.safeplace IS NULL
THEN 'test SAFEPLACE IS NULL'
ELSE 'test Safeplace IS NOT NULL'
END,
middlename =
CASE WHEN ot.safeplace IS NULL
THEN 'test2 SAFEPLACE IS NULL'
ELSE 'test2 Safeplace IS NOT NULL'
END,
FROM order_transaction ot
WHERE customer.custid = ot.custid
AND ot.trans_orderid = 5678
AND customer.custid = 1234
上述作品。它基本上檢查另一個表中的字段是否爲NULL,然後相應地更新客戶的「姓」和「中間名」。正如你在上面看到的,我重複了兩次相同的CASE陳述。我的問題是 - 有沒有一種方法可以只指定一次CASE語句?
重點是,如果我說要根據一定的條件更新10個字段,我是否需要包含10個相似的CASE條件?或者SQL可以改進爲只有一個CASE,並且WHEN/ELSE子句中有10個字段更新?
(我使用Postgresql 8.2數據庫,但我相信上面是標準的SQL)。
非常感謝, 仙人
不是最好的解決方案理查德。當您的選擇首先掃描表並添加結果,然後過濾它。 – 2011-04-05 08:26:59
@Dumitrescu Bogdan /我不認爲它這樣做。因爲PostgreSQL將展開查詢以將過濾器應用到子查詢中,但仍保留使用定義(計算)列的能力。 – RichardTheKiwi 2011-04-05 08:33:40
OP的語法不是標準SQL(也請注意,SQL標準是國際化的,而'A'是'ANSI'代表'美國',所以「符合ISO的SQL」在這裏更合適:) – onedaywhen 2011-04-05 09:06:15