我在firebird 1.5数据库中有两个表,表是客户端和注释,在notes表中,Client表中的每个相应记录可以有多个记录,有时没有。 这些表的结构类似于
Client_id name
-----------------
1 Sam
2 Lee
3 Steve
4 Linda
5 Sue
6 Jill
7 Jack
Notes_id client_id Note
------------------------------
1 1 New
2 1 do not send
3 2 old
4 2 likes
5 4 do not send
6 5 new
7 5 Cats and Dogs
8 5 drives
我想运行一个select语句,它只返回Client表中的记录,其中没有在notes表中链接到客户端的名为'do not send'的注释。因此,使用上面的示例,select语句只会从客户端表中返回以下记录。
Client_id name
-----------------
2 Lee
3 Steve
5 Sue
6 Jill
7 Jack
这可能吗?对此有任何帮助将不胜感激。
关心艾伦
答案 0 :(得分:1)
以下是执行该任务的三个查询:
SELECT
c.*
FROM
client c
WHERE
NOT EXISTS(SELECT * FROM notes n WHERE n.client_id = c.client_id
AND n.note = 'do not send')
或
SELECT
c.*, n.client_id
FROM
client.c LEFT JOIN
(SELECT client_id FROM notes WHERE note = 'do not send') n
ON c.client_id = n.client_id
WHERE
n.client_id IS NULL
或
SELECT
c.*
FROM
client c
WHERE
NOT c.client_id IN (SELECT client_id FROM notes n
WHERE n.note = 'do not send')