firebird中的链接表,丢弃在一对多链接表中具有特定值的记录

时间:2012-08-07 11:21:24

标签: sql join firebird

我在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 

这可能吗?对此有任何帮助将不胜感激。

关心艾伦

1 个答案:

答案 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')