1

UNIONとして持っているものをINTERSECTに変換する方法を検討してきましたが、MSAccessにINTERSECTキーワードがありません。

ユニオンではなく、これら2つのselectステートメントの共通部分が必要な場合、次のコードが内部結合を使用するとどのように見えるかについて、私は非常に混乱しています。

SELECT DISTINCTを選択してから内部結合を使用すれば、私が望むことを達成できることはわかっていますが、ONキーワードは本当に混乱します。

私は1週間前に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];

ありがとうございました。

4

1 に答える 1

1

これをテストしていないので、MSAccess固有の変更をたくさん行う必要があります。ただし、各識別子を四角いブロックで不必要に引用することで、クエリを難読化しないようにお願いします。

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

しかし、基本的にはこのようなものでうまくいきます。

ゴードンが指摘したように編集

于 2012-05-08T16:32:02.947 に答える