2013-04-12 31 views
6

以下のSQLコードでmsアクセスで取得するのと同じ結果を得るにはどうすればよいですか? EXCEPT句を認識できません...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

EXCEPTあなたが条件を組み合わせて2つ目を失うことを取り除くために:

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

+1私は '存在しない({except query})'の行に沿って考えていましたが、あなたのアプローチはこの特定のケースの方がずっと簡単です。 –

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

[this](http://www.mssqltips.com/sqlservertip/2779/ways-to-compare-and-find-differences-for-sql-server-tables-and-data/)によれば、「EXCEPT '節は' NULL'条件だけでなく違いを見つけるでしょう。 – Profex

0

に対応MS Access>作成>クエリウィザードとあなたは次の結果を得るでしょう

連合 iが組合にいくつかのテーブルを使用する代わりに、サブを使用すると、ここに明示的な例ではない

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

を照会しますが、UNION-INGの2つのフェッチのテーブルと選択を考慮し、別のAccessクエリでありますその組合から、特定のフィールド組み合わせのインスタンス数が2未満のペアを選択します。これは、各テーブルがフィールドの組み合わせで同じ値を持つレコードの複数のインスタンスを持つ場合、これらのレコードは同じであり、結果セットから削除できることを意味します。そうでない場合、それらは1つのテーブルに対してユニークであり、選択されたテーブルのレコードだけをフェッチして残りのテーブルに一致するものは残します。 KWのような貧しい人の "EXCEPT"のようなもの。

関連する問題