2017-06-22 8 views
0

this質問で示されているような差異を設定しようとしていますが、Microsoft Accessで行っています。次のように私が使用していたSQLクエリは次のとおりです。私はこれを実行するとFrom句のMS Access SQLエラー

SELECT FieldName 
FROM CalParams_External 
EXCEPT SELECT FieldName 
FROM CalParams_Internal 
UNION 
SELECT FieldName 
FROM CalParams_Internal 
EXCEPT SELECT FieldName 
FROM CalParams_External 

は、しかし、エラーがスローされます。

Syntax error in FROM clause

私はこの作業を取得したいと思います。私はここで間違っているのですが、どうすればこの簡単なスクリプトを実行できますか?

EDIT

以下のコメントによると、JETはEXCEPT文をサポートしていません。代わりにMINUSステートメントを使用してデータセットのうちの1つのみの交差していない部分を見つけることで問題を解決したいと思います(これはサポートされていると思います)。ここで私が今やっているものです:

SELECT FieldName 
From CalParams_External 
MINUS 
SELECT FieldName 
FROM CalParams_Internal 

私はまだかかわらず、FROM句について同じエラーを取得しています。

+0

JETはEXCEPTをサポートしていません。 –

+0

どうすればJETでこれを行うことができますか? – user32882

+0

https://stackoverflow.com/questions/19615177/how-do-i-write-a-full-outer-join-query-in-access – koriander

答えて

3

MS AccessはEXCEPTをサポートしていないため、NOT INまたはNOT EXISTSを代わりに使用してください。 NOT INは読み込みが容易ですが、null以外の列でのみ動作します。

クエリで

、NOT:

SELECT FieldName FROM CalParams_External 
WHERE FieldName NOT IN (SELECT FieldName FROM CalParams_Internal) 
UNION 
SELECT FieldName FROM CalParams_Internal 
WHERE FieldName NOT IN (SELECT FieldName FROM CalParams_External); 

ないでクエリをEXISTS:

SELECT FieldName FROM CalParams_External e 
WHERE NOT EXISTS (SELECT * FROM CalParams_Internal i WHERE i.FieldName = e.FieldName) 
UNION 
SELECT FieldName FROM CalParams_Internal i 
WHERE NOT EXISTS (SELECT * FROM CalParams_External e WHERE e.FieldName = i.FieldName) 

集計クエリ:

代替がそれぞれから一度各FiedNameを選択することであろうテーブルを選択してから

SELECT FieldName 
FROM 
(
    SELECT DISTINCT FieldName FROM CalParams_External 
    UNION ALL 
    SELECT DISTINCT FieldName FROM CalParams_Internal 
) 
GROUP BY FieldName 
HAVING COUNT(*) = 1; 
+0

それは動作するように見えますが、私は 'MINUS '文がこのコンテキストで使用できます。 'MINUS'クエリにオプションを1つ追加できますか? – user32882

+0

MS Accessは、標準SQLである「EXCEPT」やOracle独自の「MINUS」をサポートしていません。私は私の答えに代わるものを追加しましたが、あなたはMS Accessで 'EXCEPT'のようなものはありません。 –

+0

ok私は答えを受け入れる – user32882