当连接表中的记录不存在时 MySQL 连接

Mil*_*lic 3 mysql join

当连接表中的记录不存在时,我如何连接两个表。我尝试过这样的事情:

SELECT 
    Confessions.ID, Confessions.WriteTitle, Confessions.WriteArea,
    Confessions.POST_DATE, Votes.Type
FROM Confessions LEFT OUTER JOIN Votes ON Confessions.ID = Votes.PostID 
WHERE ForUser = :ForUser AND Status = :Status AND Votes.IP_Check = :IP_Check
Run Code Online (Sandbox Code Playgroud)

但是当来自带有 PostID 的投票记录(如 Confessions 中的 ID)不存在时,MySQL 会返回此记录的空结果。有没有其他办法?

dno*_*eth 6

内部表上的 WHERE 条件会将结果更改为内部连接。您需要将此条件移至 ON:

SELECT 
    Confessions.ID, Confessions.WriteTitle, Confessions.WriteArea,
    Confessions.POST_DATE, Votes.Type
FROM Confessions LEFT OUTER JOIN Votes 
  ON Confessions.ID = Votes.PostID 
 AND Votes.IP_Check = :IP_Check
WHERE ForUser = :ForUser AND Status = :Status 
Run Code Online (Sandbox Code Playgroud)

根据经验:通常情况下,外部表上的WHERE条件为 in,而内部表上的条件为ON