访问替代EXCEPT子句

时间:2013-04-12 20:43:09

标签: sql ms-access

如何在ms访问中获得与下面的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 个答案:

答案 0 :(得分: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 :(得分:3)

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 :(得分:0)

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

联盟是一个单独的访问查询,我用来联合几个表而不是使用子查询

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

答案 3 :(得分:0)

这里不是一个明确的例子,但考虑UNION处理两个获取的表,并从该联合中选择具有少于2个特定字段组合实例的对。这意味着,如果每个表在字段组合中具有多个具有相同值的记录实例,则这些记录是相同的,可以从结果集中删除。如果没有,它们对于一个表是唯一的,只留下来自所选表的记录,其中与另一个表不匹配。有点像穷人"除了" KW。

相关问题