正确使用 NOT EXISTS

Proper use of NOT EXISTS

我有两个 table -

member_master
-----------------------------
member_id, ( PK )
branch_id, ( PK )
name member_id, 


member_photo 
-----------------------------
member_id, ( FK )
branch_id, ( FK )
photo_index, 
photo_file

member_master 中的每个条目在 member_photo table 中都有零个或多个对应条目。

我有两个要求:

  1. 从 member_master 中获取所有在 member_photo table 中至少有一个条目的条目。我使用以下 SQL 命令

    得到了正确的结果
    SELECT DISTINCT member_master.member_id,member_master.branch_id,name
     FROM member_master, member_photo
     WHERE member_master.branch_id=1 
     AND EXISTS
     (
       SELECT member_photo.member_id 
       WHERE member_master.member_id = member_photo.member_id 
       AND member_master.branch_id = member_photo.branch_id
     )
    ;
    
  2. member_master 中获取所有在 member_photo table 中没有任何条目的条目。我正在使用以下 SQL 命令

    SELECT DISTINCT member_master.member_id,member_master.branch_id,name FROM member_master, member_photo
    WHERE member_master.branch_id=1 
    AND NOT EXISTS
    (
      SELECT member_photo.member_id 
      WHERE member_master.member_id = member_photo.member_id 
      AND member_master.branch_id = member_photo.branch_id
    )
    ;
    

唯一的区别是我在 EXISTS 命令之前添加了一个 NOT。 但不幸的是,它没有给我正确的结果。它只是 returns table.

中的所有行

请注意,我使用的是 SQL Server Express 2005。

你应该在不加入 table 的情况下进行,只需 select 来自大师 table 并添加照片 table 的检查,如下所示:

SELECT
  m.member_id,
  m.branch_id,
  m.name 
FROM 
  member_master m
WHERE 
  m.branch_id=1 AND 
  EXISTS (SELECT 1 from member_photo p where
    m.member_id = p.member_id AND m.branch_id = p.branch_id)

另一种情况类似:

SELECT
  m.member_id,
  m.branch_id,
  m.name 
FROM 
  member_master m
WHERE 
  m.branch_id=1 AND 
  not EXISTS (SELECT 1 from member_photo p where
    m.member_id = p.member_id AND m.branch_id = p.branch_id)

需要SQL查询是:

SELECT 
      member_id,
      branch_id,
      name 
FROM member_master
WHERE member_master.branch_id=1
    AND NOT EXISTS(SELECT member_photo.member_id 
                   WHERE member_master.member_id = member_photo.member_id
                       AND member_master.branch_id = member_photo.branch_id)