我可以使用FROM语句进行更新吗?

时间:2018-05-18 08:46:00

标签: sql oracle sql-update

我想在表格的某些字段上设置UPDATE,包括FROM条件,如下所示:

UPDATE T_NEW_TABLE_IMPORT_STATUS TB
SET
    ID = NULL,
    IMPORT_DATE = NULL,
    IMPORT_STATUS = 0,
    ERROR_CODE = 3,
    LASTMODIFIEDAT = NULL
FROM T_BEDA
WHERE 1=1
    AND TB.TRANSACTION_ID = 999
    AND TB.TRANSACTION_ID = T_BEDA.TAC
    AND T_BEDA.SOP IS NULL;

在当前状态下,它失败并显示以下错误:

  

错误报告 -
  SQL错误:ORA-00933:SQL命令未正确结束

显然,在这种情况下不允许使用FROM子句。

基本上,我希望此更新仅在T_BEDA.SOPNULL时才会发生。如何使用SQL或PL / SQL解决此问题?

3 个答案:

答案 0 :(得分:2)

使用IN子句检查TRANSACTION_ID中是否存在T_BEDA

UPDATE T_NEW_TABLE_IMPORT_STATUS TB
SET ID = NULL,
    IMPORT_DATE = NULL,
    IMPORT_STATUS = 0,
    ERROR_CODE = 3,
    LASTMODIFIEDAT = NULL
WHERE TB.TRANSACTION_ID = 999 
  AND TB.TRANSACTION_ID IN (
        SELECT T_BEDA.TAC 
        FROM T_BEDA 
        WHERE TB.TRANSACTION_ID = T_BEDA.TAC
          AND T_BEDA.SOP IS NULL
    )

答案 1 :(得分:2)

看起来您正在尝试使用Postgres更新语法。 Oracle不支持此功能,也不支持更新联接,但您可以将更新改为使用WHERE子句中的子查询来检查第二个表:

UPDATE T_NEW_TABLE_IMPORT_STATUS TB
SET ID = NULL,
    IMPORT_DATE = NULL,
    IMPORT_STATUS = 0,
    ERROR_CODE = 3,
    LASTMODIFIEDAT = NULL
WHERE
    TB.TRANSACTION_ID = 999 AND
    EXISTS (SELECT 1 FROM T_BEDA t WHERE TB.TRANSACTION_ID = t.TAC AND t.SOP IS NULL)

答案 2 :(得分:0)

以下是我要做的事情:

UPDATE T_NEW_TABLE_IMPORT_STATUS TB
 SET ID = NULL,IMPORT_DATE = NULL,IMPORT_STATUS = 0,ERROR_CODE = 3, LASTMODIFIED = NULL 
WHERE 
 (TB.TRANSACTION_ID = 999) AND 
 (TB.TRANSACTION_ID) = (Select T_BEDA.TAC From T_BEDA WHERE T_BEDA.SOP           IS NULL)