我已经写了一个查询来基于在主表中找到的条件筛选表,然后删除与第三个表匹配的行。我在Access中执行查询,所以我不能使用MINUS。它可以工作,但是我发现它为一些但不是全部的选定记录返回重复的行。我用DISTINCT修复了它,但我不知道它为什么会首先返回重复项。这是一个非常简单的查询:为什么这个SQL查询需要DISTINCT?
select distinct sq.*
from
(select List_to_Check.*, Master_List.SELECTION_VAR
from List_to_Check
left join Master_List
on List_to_Check.SUB_ID = Master_List.SUB_ID
where Master_List.SELECTION_VAR = 'criteria'
) as sq
left join List_to_Exclude
on sq.SUB_ID = List_to_Exclude.SUB_ID
where List_to_Exclude.SUB_ID is null
;
编辑:所有三个表之间的关系在SUB_ID变量上是1对1。结合使用LEFT JOIN,我预计每个ID有一行。
很难说没有你的表,数据和表之间的关系(从1到1,1到N等)的描述。 – sstan
如果没有样本表数据的话,很难说清楚。一般来说,不需要区分,并通过适当的“group by”语句解决。 – topshot
@sstan所有三个表之间的关系在SUB_ID var上都是1对1。这就是为什么我不希望重复。 – Rominus