0

嘿,我正在尝试使用下面的查询来删除处理帐号的所有记录

SELECT * FROM userAccount UA 
   INNER JOIN userCase UC ON UA.AccNum = UC.Userlink 
WHERE UA.AccNum = 9571612;

这确实会产生2 行(与帐户 #关联的案例有2 个)。

但是,这样做(我需要做的):

SELECT * FROM userAccount UA 
    INNER JOIN userCase UC ON UA.AccNum = UC.Userlink 
    INNER JOIN authPerson AP ON AP.Usercase = UC.CaseNum 
WHERE UA.AccNum = 9571612;

如果有案例但如果在AP.Usercase = UC.CaseNum上的 INNER JOIN authPerson AP 中找不到任何案例,这可以正常工作

如果我将两个INNER JOIN都更改为LEFT JOIN,我会得到数据。只是想确保这是正确的方法。

4

2 回答 2

1

您可以尝试使用 INNER JOIN 或 LEFT JOIN ,因为您要删除处理帐号的所有记录,所以最好使用 LEFT JOIN ,因为即使记录不匹配也会删除:

DELETE * FROM userAccount UA 
LEFT JOIN userCase UC ON UA.AccNum = UC.Userlink 
LEFT JOIN authPerson AP ON AP.Usercase = UC.CaseNum 
WHERE UA.AccNum = 9571612;
于 2013-06-04T06:49:18.560 回答
0

这是正确的行为。使用INNER JOIN所有记录必须存在于所有连接的表中。使用OUTER JOIN,记录只必须存在于主表中(在本例中为您的 useraccount 表)。

关于您的问题,如果您想从 userAccount 表中删除,如果该记录也存在于其他表中,则使用INNER JOIN. 但是,如果没关系,您将需要一个OUTER JOIN.


编辑——根据您的评论,对于匹配的记录,这将从所有表中删除:

DELETE UA, UC, AP
FROM userAccount UA
    INNER JOIN userCase UC ON UA.AccNum = UC.Userlink 
    INNER JOIN authPerson AP ON AP.Usercase = UC.CaseNum 
WHERE UA.AccNum = 9571612;

OUTER JOIN或者,即使记录不匹配,您也可以使用删除:

DELETE UA, UC, AP
FROM userAccount UA
    LEFT JOIN userCase UC ON UA.AccNum = UC.Userlink 
    LEFT JOIN authPerson AP ON AP.Usercase = UC.CaseNum 
WHERE UA.AccNum = 9571612;
于 2013-06-04T01:13:33.883 回答