我正在努力设置一个从表中排除某些值的查询。 为了更好地理解 - 数据库是在临床试验的背景下创建的,我想通过一个尚未参与研究的组合框选择网站,而他们可能已经或可能没有参与另一个研究。
这是方法:
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”来添加尚未参与任何研究的所有网站。
编辑:以下是一个示例:
现在是棘手的部分
答案 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])))));