2017-06-22 55 views
0

MS訪問SQL錯誤我試圖做一個設置的差異,如this問題所示,除了我在Microsoft 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

我希望得到這個工作。我在這裏做錯了什麼,以及如何讓這個簡單的腳本運行?

編輯

根據下面的評論,JET不支持EXCEPT聲明。我想通過使用MINUS語句(我相信這是支持的)找到只有一個數據集的非相交部分來分解問題。下面是我現在在做什麼:

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 INNOT EXISTSNOT IN更具可讀性,但僅適用於非空列。

NOT IN查詢:

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); 

NOT 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」查詢添加一個選項嗎? – user32882

+0

MS Access不支持'EXCEPT'這是標準的SQL,也不是Oracle專有的'MINUS'。我已經爲我的答案添加了一個替代方案,但是在MS Access中沒有像「EXCEPT」這樣的內容。 –

+0

好的,我會接受答案 – user32882