LEFT OUTER JOIN查询不返回预期的行

7 mysql left-join sqlfiddle

我的目标是使用第四个维恩图来完成LEFT OUTER JOIN打算做的事情:SQL Diagrams:

在此输入图像描述

我的查询根本没有返回任何值,实际上,它应该返回Consultant_Memberships中的所有值减去Consultant_Memberships_Lists中存储的值.

请参阅SQL Fiddle以便更容易理解:

SELECT * 
FROM   consultant_memberships 
       LEFT OUTER JOIN consultant_memberships_list 
                    ON consultant_memberships.`id` = 
                       consultant_memberships_list.membership_id 
WHERE  consultant_memberships_list.consultant_id = $id 
       AND consultant_memberships_list.membership_id IS NULL 
Run Code Online (Sandbox Code Playgroud)

查询使用'5'作为ID用于演示目的,以尝试挑选正确的行.

Tar*_*ryn 16

您当前的查询基本上是INNER JOIN因为consultant_id = 5on WHERE子句.我相信你真的想用:

SELECT * 
FROM   consultant_memberships m
LEFT OUTER JOIN consultant_memberships_list l
  ON m.`id` = l.membership_id 
  AND l.consultant_id = 5 
WHERE l.membership_id IS NULL;
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo

  • +1 WHERE子句中的谓词否定了LEFT JOIN的"外部"性.我想到OUTER连接的最简单方法是:如果找不到匹配的行,则生成一个虚拟行,以便返回匹配的行.生成的虚拟行将完全由NULL值组成.因此,WHERE子句中的任何"IS NOT NULL"谓词将排除所有生成的虚拟行. (2认同)