2012-05-08 6 views
1

私はUNIONをINTERSECTに変換する方法を見てきましたが、MS AccessにINTERSECTキーワードはありません。MS AccessでINTERSECT(INNER JOIN)を実装する

私は、これらの2つの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

を指摘したようにトリック..

が編集し、Uカント組合や同じ列の列を表示しないと交差する – nawfal

+0

ああ、私は[名前]と[カテゴリ]を秒で選択して使用しているため、交差は機能しません。ことは、連合は今のところ私のために働いていることです、ちょうど交差点に変更したい。 – BadgerBeaz

+0

はい私はそれを得た。私が意味することはあなたが組合を傾けることです。*を選択し、catt.nameを選択してください。私は解決策を与えるでしょう – nawfal

答えて

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 

しかし、基本的にはこのようなものは、ゴードンが

+0

サブクエリ(view2)内で 'ORDER BY'を使用するのは私にとっては間違っています。 'ORDER BY'が必要な場合は、サブクエリの外側で行います。 – HansUp

+0

@HansUp私は今、その罰金でしょうか? – nawfal

+0

そのフォーマットをお寄せいただきありがとうございます...読みやすくなりました。私はいくつかの変更を追加します。あなたが同意しない場合、私の変更をロールバックしてください。 – HansUp