正确使用 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 中都有零个或多个对应条目。
我有两个要求:
从 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
)
;
从 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)
我有两个 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 中都有零个或多个对应条目。
我有两个要求:
从 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 ) ;
从
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)