基于来自另一个查询的值排除整行

时间:2014-05-19 16:43:21

标签: sql ms-access

我正在使用MS Access,我的情况相当复杂。

我有通过2个连接表链接到不同数量的不同公司的受访者。我希望能够创建一个不同客户的列表,其中排除了与公司X相关的任何客户。

Here is a pic of the relationships that are involved with the query.

这是我想要实现的一个例子。

RespondentRef | Respondent Name
8               Joe Bloggs

RespondentRef | GroupRef
8               2

GroupRef | CompanyRef
2          10

CompanyRef | CompanyName
10           Ball of String

我想要一个查询,我输入'Ball of String'作为公司名称,然后它生成一个所有受访者的列表(取自Tbl_Respondent),完全排除了受访者8(因为他链接到CompanyName:Ball) of String)。

     Tbl_Respondent
RespondentRef | Respondent Name
...             ...
7               Bob Carlyle
9               Anton Boyle

我尝试过多次使用<>的子查询组合并且不存在且不存在且似乎没有任何工作。我怀疑这些表的链接方式可能与它有关。

非常感谢您提供的任何帮助。如果您有任何问题,请告诉我。 (我已尽最大努力,但请接受我对任何格式约定或我可能犯过的礼仪失败的道歉。)

非常感谢。

编辑:

我格式化的Frazz代码仍然在转动,导致语法错误。任何帮助将不胜感激。

SELECT *
FROM Tbl_Respondent
WHERE RespondentRef NOT IN (
  SELECT tbl_Group_Details_Respondents.RespondentRef
  FROM tbl_Group_Details_Respondents
  JOIN tbl_Group_Details ON tbl_Group_Details.GroupReference = tbl_Group_Details_Respondents.GroupReference
  JOIN tbl_Company_Details ON tbl_Company_Details.CompanyReference = tbl_Group_Details.CompanyReference
  WHERE tbl_Company_Details.CompanyName = "Ball of String"

1 个答案:

答案 0 :(得分:0)

这应该做你需要的:

SELECT *
FROM Tbl_Respondent
WHERE RespondentRef NOT IN (
  SELECT gdr.RespondentRef
  FROM Tbl_Group_Details_Respondent gdr
  JOIN Tbl_Group_Details            gd  ON gd.GroupRef=gdr.GroupRef
  JOIN Tbl_Company_Details          cd  ON cd.CompanyRef=gd.CompanyRef
  WHERE cd.CompanyName='Ball of String'
)