EXCEPT子句的替代方法——Access

9

我该如何在MS Access中获得与下面SQL代码相同的结果?它不认识EXCEPT子句...

SELECT DISTINCT 
       P.Name, 
       T.Training
  FROM Prof AS P, 
       Training_done AS TC, 
       Trainings AS T
 WHERE (P.Name Like '*' & NameProf & '*') 
   AND (P.Primary_Area = T.Cod_Area)
EXCEPT
SELECT DISTINCT 
       P.Name, 
       T.Training
  FROM Prof AS P, 
       Training_done AS TC, 
       Trainings AS T
 WHERE (P.Name Like '*' & NameProf & '*') 
   AND (P.Cod_Prof = TC.Cod_Prof);

事先感谢你!

4个回答

6
为了避免使用EXCEPT,您可以将条件组合并否定第二个条件:
SELECT DISTINCT 
       P.Name, 
       T.Training
  FROM Prof AS P, 
       Training_done AS TC, 
       Trainings AS T
 WHERE ((P.Name Like '*' & NameProf & '*') AND
        (P.Primary_Area = T.Cod_Area)) 
   AND NOT ((P.Name Like '*' & NameProf & '*') AND
            (P.Cod_Prof = TC.Cod_Prof));

1
+1 我一开始也考虑了 WHERE NOT EXISTS ({except query}) 的方式,但你的方法对于这个特定情况来说更加直接。 - Gord Thompson

5
SELECT A.x FROM A
EXCEPT
SELECT B.x FROM B

对应于

SELECT A.x FROM A 
LEFT JOIN B 
ON A.x = B.x 
WHERE B.x IS NULL

2
根据这篇文章,EXCEPT子句也可以找到差异,而不仅仅是NULL条件。 - Profex

2
使用 MS Access > Create > 查询向导 中的 查找不匹配向导,您将获得以下结果:

Union 是一个单独的 Access 查询,我用它来联合几个表,而不是使用子查询。

SELECT TableMain.Field1
FROM TableMain LEFT JOIN [Union] ON TableMain.[Field1] = Union.[field1]
WHERE (((Union.field1) Is Null));

0

这里没有明确的示例,但考虑将两个获取的表进行 UNION 并从该联合中选择具有少于 2 个特定字段组合实例的对。这意味着,每个表都有多个具有相同字段组合值的记录实例时,这些记录是相同的,并且可以从结果集中消除。否则,它们是唯一的一个表,使得获取仅来自所选表的记录,在另一个表中没有匹配。有点像穷人版的 "EXCEPT" KW。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接