MS访问VBA - 查询排除

时间:2017-05-22 07:27:44

标签: sql vba ms-access

我正在努力设置一个从表中排除某些值的查询。 为了更好地理解 - 数据库是在临床试验的背景下创建的,我想通过一个尚未参与研究的组合框选择网站,而他们可能已经或可能没有参与另一个研究。

这是方法:

tbl_site - 包含唯一的“site_ID”和“site_country”

tbl_study - contanis是一个独特的“study_ID”

tbl_init - 每当网站参与某项研究时,都会生成一个条目,其中包含唯一的“init_ID”,相应的“site_ID”和“study_ID”。

查询应从“tbl_site”中选择所有尚未在“tbl_ini”中具有已定义“study_id”的匹配条目的网站。我明白,我应该能够使用LEFT JOINS实现这一目标。

SELECT tbl_site.site_ID, tbl_site.site_country, tbl_init.study_ID
FROM tbl_site LEFT JOIN tbl_init ON tbl_site.site_ID = tbl_init.site_ID
WHERE (((tbl_init.study_ID) Not In ([Form]![frm_init]![study_ID]))) AND ((tbl_site.site_country)=[cbo_country]))

但是,似乎排除值只会影响tbl_init的第1个值。例如:如果我有来自美国的2个站点和来自英国的2个站点,则所有英国站点和一个美国站点已经是研究的一部分1.运行查询1将实际上排除来自美国的参与站点,但是仍然会向我显示来自英国的所有网站(我想这取决于源表中的初始排序)。 最后,我还需要添加“Not Null”来添加尚未参与任何研究的所有网站。

编辑:以下是一个示例:

  1. 我有“学习X”和“学习Y”,但尚未分配任何网站=> study_IDs的查询显示tbl_site中的所有网站(“A” - “E”)
  2. 将网站“A”,“B”和“C”添加到“Study X”后,查询“Study X”会产生“D”和“E”,这是目前为止的好处。
  3. 将“D”和“E”添加到“Study Y”后,“Study Y”的查询显示网站“A”到“C”。
  4. 现在是棘手的部分

    1. 我将已经参与“Study X”的网站“C”添加到“Study Y”。如果我现在查询“Study X”,则再次出现“C”,因为tbl_init中有一个条目,其中study_ID与“C”匹配,但study_ID不等于“Study X” - 反之亦然。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您将两个参数传递给查询国家 Study Id ,并且您希望列出该国家/地区中所有< strong>不参与给定的学习ID。

PARAMETERS [cbo_country] Text ( 255 ), [Forms]![frm_init]![study_ID] Text ( 255 );
SELECT tbl_site.site_ID, tbl_site.site_country, tbl_init.study_ID
FROM tbl_site LEFT JOIN tbl_init ON tbl_site.site_ID = tbl_init.site_ID
WHERE (((tbl_site.site_country)=[cbo_country]) AND ((tbl_site.site_ID) Not In (SELECT tbl_init.site_ID FROM tbl_init WHERE (((tbl_init.study_ID)=[Forms]![frm_init]![study_ID])))));