Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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_Merge_Sql Update_Oracle12c - Fatal编程技术网

Sql 如何在Oracle中将外部联接选择查询转换为合并

Sql 如何在Oracle中将外部联接选择查询转换为合并,sql,oracle,merge,sql-update,oracle12c,Sql,Oracle,Merge,Sql Update,Oracle12c,如何将此简单的外部联接转换为合并,以将选定行的FT.SS更新为特定值: SELECT FT.SS FROM FT_T FT LEFT OUTER JOIN DC_T DC ON FT.ID = DC.ID AND FT.CN = DC.CN WHERE FT.GID = 'AB' AND SS = 'C' AND FT.DEL = 'N' AND PR_S IS NULL AND EN_S IS NULL AND (DC.ID IS NULL OR DC.SIGNED IS NULL);

如何将此简单的外部联接转换为合并,以将选定行的FT.SS更新为特定值:

SELECT FT.SS FROM FT_T FT LEFT OUTER JOIN DC_T DC
    ON FT.ID = DC.ID AND FT.CN = DC.CN
WHERE FT.GID = 'AB' AND SS = 'C' AND FT.DEL = 'N' AND PR_S IS NULL AND EN_S IS NULL
AND (DC.ID IS NULL OR DC.SIGNED IS NULL); 
使用更新相对容易:


但是可以用MERGE完成吗?

您的MERGE语句如下所示:

MERGE INTO ft_t tgt
USING (SELECT ft.id,
              ft.cn
       FROM   ft_t ft
              LEFT OUTER JOIN dc_t dc ON ft.id = dc.id AND ft.cn = dc.cn
       WHERE  ft.gid = 'AB'
       AND    ft.ss = 'C'
       AND    ft.del = 'N'
       AND    ft.pr_s IS NULL
       AND    ft.en_s IS NULL
       AND    (dc.id IS NULL OR dc.signed IS NULL)) src
 ON (tgt.id = src.id AND tgt.cn = src.cn) -- assuming these two columns are the primary key for the ft_t table
WHEN MATCHED THEN
  UPDATE SET tgt.ss = 'X';

update语句在其当前状态下永远不会工作。不能在子查询FT EXTER中引用表别名中的列。另外,如果返回了多行,如果使用=',则会出现错误。也许你是说FTX.GID。。。。。。和FTX.ID,FTX.CN在?@KaushikNayak你是对的。我在问题中更正了它。谢谢
MERGE INTO ft_t tgt
USING (SELECT ft.id,
              ft.cn
       FROM   ft_t ft
              LEFT OUTER JOIN dc_t dc ON ft.id = dc.id AND ft.cn = dc.cn
       WHERE  ft.gid = 'AB'
       AND    ft.ss = 'C'
       AND    ft.del = 'N'
       AND    ft.pr_s IS NULL
       AND    ft.en_s IS NULL
       AND    (dc.id IS NULL OR dc.signed IS NULL)) src
 ON (tgt.id = src.id AND tgt.cn = src.cn) -- assuming these two columns are the primary key for the ft_t table
WHEN MATCHED THEN
  UPDATE SET tgt.ss = 'X';