ORACLE/SQL - UPDATE 语句问题(需要 OR 一些集合)

Posted

技术标签:

【中文标题】ORACLE/SQL - UPDATE 语句问题(需要 OR 一些集合)【英文标题】:ORACLE/SQL - UPDATE Statement Issue (Need to OR some sets) 【发布时间】:2014-08-21 12:44:45 【问题描述】:

我在标题中提出的问题可能吗?我需要在更新中“或”一些集合。

UPDATE prtmst
SET prtfam = '1'
WHERE prtnum IN ('111', '222', '333', '444')
AND prtfam = '1M'

运行良好,但我需要它是这样的:

UPDATE prtmst
SET prtfam = '1'
WHERE prtnum IN ('111', '222', '333', '444')
AND prtfam = '1M'
 OR SET prtfam = '2'
WHERE prtnum IN ('111', '222', '333', '444')
AND prtfam = '2M'
 OR SET prtfam = '3'
WHERE prtnum IN ('111', '222', '333', '444')
AND prtfam = '3M'
 OR SET prtfam = '1M'
WHERE prtnum IN ('111', '222', '333', '444')
AND prtfam = '1'
 OR SET prtfam = '2M'
WHERE prtnum IN ('111', '222', '333', '444')
AND prtfam = '2'
 OR SET prtfam = '3M'
WHERE prtnum IN ('111', '222', '333', '444')
AND prtfam = '3'

【问题讨论】:

您可以使用 CASE 和 IN 来执行更新。此处的示例:***.com/questions/5170864/… 【参考方案1】:

请在相信这个答案之前运行一些测试。它应该工作,但由于我不知道你的架构,可能会发生不好的事情。

UPDATE prtmst
SET prtfam =
CASE
    WHEN prtnum IN ('XBR140006T', 'XCA02334', 'XCA02344')   
        AND prtfam = 'FERRERO1M' 
        THEN  'FERRERO1'
    WHEN prtnum IN ('XBR140006T', 'XCA02334', 'XCA02344')
        AND prtfam = 'FERRERO2M'
        THEN 'FERRERO2'
    WHEN prtnum IN ('XBR140006T', 'XCA02334', 'XCA02344')
        AND prtfam = 'FERRERO3M'
        THEN 'FERRERO3'
    WHEN prtnum IN ('XBR140006T', 'XCA02334', 'XCA02344')
        AND prtfam = 'FERRERO1'
        THEN 'FERRERO1M'
    WHEN prtnum IN ('XBR140006T', 'XCA02334', 'XCA02344')
        AND prtfam = 'FERRERO2'
        THEN 'FERRERO2M'
    WHEN prtnum IN ('XBR140006T', 'XCA02334', 'XCA02344')
        AND prtfam = 'FERRERO3'
        THEN  'FERRERO3M'
END
WHERE prtnum IN ('XBR140006T', 'XCA02334', 'XCA02344')
  AND prtfam IN ('FERRERO1M','FERRERO2M','FERRERO3M','FERRERO1','FERRERO2','FERRERO3')

伙计,那个费列罗人正在给你下地狱。

编辑:添加了 WHERE 子句以避免尝试更新不包含在 CASE ... WHEN 块中的行。

【讨论】:

我有一些非常相似的东西,但我回来了“更新或删除语句必须包含 where 子句”。有什么想法吗? 好吧,如果那个 CASE ... WHEN 块不包含整个 Universe,那么查询可能会失败。让我添加一些东西 情况很好。我不是一个非常大的 SQL 人(Web 开发人员),所以我不是 100% 了解 CASE 结构/逻辑/它是如何编译的。我知道还有其他条件显然被遗漏/逃避了案件,从而导致没有设置。这就说得通了。如果不满足上述条件,是否可以使用关键字“退出”逻辑结构? 谢谢你,阿梅纳迪尔!完美运行

以上是关于ORACLE/SQL - UPDATE 语句问题(需要 OR 一些集合)的主要内容,如果未能解决你的问题,请参考以下文章

oracle SQL语句,能不能同时update一个表的几个字段的值?

Oracle SQL语言DML语句与事务_超越OCP精通Oracle视频教程培训28

Oracle SQL的硬解析和软解析

Oracle SQL 更新 HUGECLOB

oracle SQL查询中,如何在where中用条件语句,判断不同情况,追加不同的And条件?

ORACLE PL/SQL:在 Oracle SQL Developer 中测试 SELECT FOR UPDATE