mySQL删除内连接,需要3个表

时间:2013-06-04 01:09:29

标签: mysql sql left-join inner-join

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

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>

2 个答案:

答案 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;