Sql 在oracle中存在与不存在

Sql 在oracle中存在与不存在,sql,oracle,Sql,Oracle,如果从下面的查询中删除exists语句,输出将如何更改。 如果删除exists,则对于条件不匹配的行,运算符ID和UPDT将设置为NULL 为什么要用额外的子查询来写这个 UPDATE AR_CRDT C SET (OPERATOR_ID, UPDT_TS) = (SELECT AD.OPERATOR_ID, sysdate FROM AR1_CUSTOMER_CREDIT A

如果从下面的查询中删除exists语句,输出将如何更改。

如果删除exists,则对于条件不匹配的行,运算符ID和UPDT将设置为NULL

为什么要用额外的子查询来写这个

UPDATE AR_CRDT C
    SET (OPERATOR_ID, UPDT_TS) = (SELECT AD.OPERATOR_ID, sysdate
                                  FROM AR1_CUSTOMER_CREDIT A      
                                  WHERE A.CREDIT_ID = C.CRDT_ID
                                 )
    WHERE EXISTS (SELECT 1
                  FROM AR1_CUSTOMER_CREDIT A          
                  WHERE A.CREDIT_ID = C.CRDT_ID
                 );
如果删除exists,则对于条件不匹配的行,运算符ID和UPDT将设置为NULL

为什么要用额外的子查询来写这个

UPDATE AR_CRDT C
    SET (OPERATOR_ID, UPDT_TS) = (SELECT AD.OPERATOR_ID, sysdate
                                  FROM AR1_CUSTOMER_CREDIT A      
                                  WHERE A.CREDIT_ID = C.CRDT_ID
                                 )
    WHERE EXISTS (SELECT 1
                  FROM AR1_CUSTOMER_CREDIT A          
                  WHERE A.CREDIT_ID = C.CRDT_ID
                 );

EXISTS当前导致对AR_CRDT的更新仅限于AR_CRDT记录与AR1_客户_信用记录关联的记录


删除该条款意味着AR_CRDT的所有记录都将更新。有些将具有子查询的值,而有些将在AR_CRDT和AR1_CUSTOMER_CREDIT之间没有链接的情况下为空。

当前存在导致AR_CRDT的更新仅限于AR_CRDT记录与AR1_CUSTOMER_CREDIT记录关联的记录


删除该条款意味着AR_CRDT的所有记录都将更新。有些子查询将具有值,而有些子查询将在AR_CRDT和AR1_CUSTOMER_CREDIT之间没有链接的情况下为空。

额外的子查询可能会在那里,以便从上面复制粘贴精确的子查询。谢谢gordon。我删除了不需要的子查询。额外的子查询可以让复制粘贴上面精确的子查询变得更容易。谢谢戈登。我删除了不需要的子查询。这类似于内部连接和左外部连接之间的区别。这实际上是内部联接和外部联接之间的区别,如果您将更新重写为联接的更新,如本文所述:这类似于内部联接和左侧外部联接之间的区别。如果将更新重写为连接的更新,则实际上是内部连接和外部连接之间的区别,如下所述: