嘿所有我尝试使用下面的查询删除处理帐号的所有记录
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;
这样可以正常 IF 如果在 INNER JOIN authPerson AP ON AP.Usercase = UC.CaseNum <中找不到任何内容,则 BUT 不存在/强>
如果我将 INNER JOIN 更改为 LEFT JOIN ,则确实获取数据..只是想确保这是正确的方法。< / p>
答案 0 :(得分: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;
答案 1 :(得分: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;