Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
包含左联接的SQL Oracle更新_Sql_Oracle_Sql Update_Left Join - Fatal编程技术网

包含左联接的SQL Oracle更新

包含左联接的SQL Oracle更新,sql,oracle,sql-update,left-join,Sql,Oracle,Sql Update,Left Join,我想对select查询的结果执行更新 SELECT a.reason, n.note FROM applications a LEFT JOIN notes n on n.app_id = a.app_id AND n.note LIKE '%old%' WHERE a.code = 'run' AND a.reason IS NULL 我想我可以单独执行这些更新,在更新中包装select,但是我得到错误ORA-01733:此处不允许虚拟列。如何执行这些更新 UPDAT

我想对select查询的结果执行更新

SELECT
    a.reason,
    n.note
FROM applications a
LEFT JOIN notes n on n.app_id = a.app_id
    AND n.note LIKE '%old%'
WHERE a.code = 'run' AND a.reason IS NULL
我想我可以单独执行这些更新,在更新中包装select,但是我得到错误ORA-01733:此处不允许虚拟列。如何执行这些更新

UPDATE (
    SELECT
        a.reason AS Reason
    FROM applications a
    LEFT JOIN notes n on n.app_id = a.app_id
        AND n.note LIKE '%old%'
    WHERE a.code = 'run' AND a.reason IS NULL
) SET Reason = null

UPDATE (
    SELECT
        n.note AS Note
    FROM applications a
    LEFT JOIN notes n on n.app_id = a.app_id
        AND n.note LIKE '%old%'
    WHERE a.code = 'run' AND a.reason IS NULL
) SET Note = null

不能同时更新这两个表。您需要两个不同的update语句,如下所示:

UPDATE NOTES N
   SET
    NOTE = NULL
 WHERE EXISTS (
    SELECT 1
      FROM APPLICATIONS A
     WHERE N.APP_ID = A.APP_ID
       AND A.CODE = 'run'
       AND A.REASON IS NULL
)
AND N.NOTE LIKE '%old%'
更新
应用程序
表非常容易,因为
应用程序
表中具有
a.code='run'和a.reason为NULL的所有记录都将出现在
选择
查询中

UPDATE APPLICATIONS A
   SET
    REASON = NULL
 WHERE A.CODE = 'run'
   AND A.REASON IS NULL;
要更新
NOTES
表,可以使用
EXISTS
子句,如下所示:

UPDATE NOTES N
   SET
    NOTE = NULL
 WHERE EXISTS (
    SELECT 1
      FROM APPLICATIONS A
     WHERE N.APP_ID = A.APP_ID
       AND A.CODE = 'run'
       AND A.REASON IS NULL
)
AND N.NOTE LIKE '%old%'
您必须先更新
NOTES
表,然后更新
APPLICATIONS
表,就像在更新
NOTES
表时使用条件
A一样。原因为空
但在更新
APPLICATIONS
表时,您正在更新
原因