在MS ACCESS中实现INTERSECT(INNER JOIN)

时间:2012-05-08 15:41:05

标签: sql ms-access select intersect

我一直在研究如何将我拥有的UNION转换为INTERSECT,但MS Access中没有INTERSECT关键字。

如果我想要使用内部联接,如果我想要这两个select语句的交集而不是它们的联合,我一直很困惑如下代码。

我知道如果我选择DISTINCT然后使用内部联接,我可以实现我想要的但是ON关键字确实让我困惑。

我刚开始一周前使用SQL,所以如果你看到代码有什么问题,我会接受所有建设性的批评:)

SELECT *
FROM (SELECT [Catt].[Name]
FROM [Catt]
WHERE ((([Catt].[Name]) Like "*" & [forms]![Main]![SrchText] & "*") 
AND [forms]![Main]!   [SrchText] IS NOT Null AND [forms]![Main]![SrchText]<>''  )

UNION

SELECT [Catt].[Name]
FROM [Catt]
WHERE  ((([Catt].[Category]) Like [forms]![Main]![Combo7].Value) AND (([forms]![Main]!    [SrchText] IS Null) OR ([forms]![Main]![SrchText]=''))))  AS Query
ORDER BY [Catt].[Name];

谢谢。

1 个答案:

答案 0 :(得分:1)

没有测试过,所以肯定会有很多MS Access特定的更改。但我请你不要通过不必要地引用方块中的每个标识符来混淆查询:

SELECT     DISTINCT title
FROM       (  
            SELECT [Catt].[Name] as title
            FROM   [Catt]
            WHERE  ([Catt].[Name] Like "*" & [forms]![Main]![SrchText] & "*") AND 
                    [forms]![Main]![SrchText] IS NOT Null AND 
                    [forms]![Main]![SrchText] <>''
           ) AS view1

INNER JOIN 

           (   
            SELECT   [Catt].[Name]
            FROM     [Catt]
            WHERE    [Catt].[Category] Like [forms]![Main]![Combo7].Value AND 
                     ([forms]![Main]![SrchText] IS Null OR 
                      [forms]![Main]![SrchText]='')
           ) AS view2 ON view1.title = view2.Name

ORDER BY   view1.title

但基本上就是这样的伎俩......

编辑为戈登指出