我一直在研究如何将我拥有的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];
谢谢。
答案 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
但基本上就是这样的伎俩......
编辑为戈登指出