2011-07-21 76 views
-1

讓人有些困惑IS,它的工作原理下飛機,但不工作在訪問....UNION JOIN和MS-ACCESS

如何做好內與工會

SELECT field1, field2 FROM 
(SELECT field1, field2, field3 FROM table1 
JOIN table3 ON table1.id=table3.id 
UNION ALL 
SELECT field1, field2, field3 FROM table2 
JOIN table4 ON table2.id=table4.id) 
WHERE field3=1 

連接的結果:

3131 - 「語法錯誤在FROM子句」

我減少成:

SELECT field1 FROM 
(SELECT field1, field3 FROM table1 
UNION ALL 
SELECT field1, field3 FROM table2) 
WHERE field3=1 

,但仍然沒有工作

即使是這樣:

SELECT * FROM 
(SELECT field1 FROM table1 
UNION ALL 
SELECT field1 FROM table2) 

不起作用

SELECT field1 FROM table1 UNION ALL SELECT field1 FROM table2 - 工程....

+0

你的意思是「在Jet中工作,但不在Access中」?你是否使用ODBC或OLEDB或DAO從外部訪問?重要的是,如果使用不同的接口訪問數據(通配符,派生表語法,保留字等),則SQL的語法中會有很多變化。 –

+0

它意味着我寫的東西。當我使用「訪問控制檯」時 - 相同的代碼響應語法錯誤。當我使用ODBC時 - 相同的代碼工作。 –

+0

你是什麼意思「訪問控制檯」?你的意思是當你在Access中打開數據庫時?當然,ODBC將會是一個不同的環境,並且對SQL的執行有着完全不同的規則。你想在哪裏工作? ODBC或內部訪問?如果兩者都有,那麼你可能必須有條件的構建你的SQL。 –

回答

1

您需要添加字段3中您的查詢

SELECT t.field1, t.field2 
FROM (
    SELECT field1, field2, Field3 
    FROM table1 
    UNION ALL 
    SELECT field1, field2, field3 FROM table2 
) as t 
WHERE t.field3=1 

基於與新的查詢您的編輯,你需要以下條件:

SELECT X.field1, X.field2 
FROM 
(
    SELECT t1.field1, t1.field2, t1.field3 
    FROM table1 t1 
    INNER JOIN table3 t3 ON t1.id=t3.id 

    UNION ALL 

    SELECT t2.field1, t2.field2, t2.field3 
    FROM table2 t2 
    INNER JOIN table4 t4 ON t2.id=t4.id 

) as x 
WHERE x.field3=1 
+0

仍然不起作用 –

+0

爲我工作,我在Access 2003中測試過它。如果刪除where子句,會發生什麼情況? – Taryn

+0

什麼也沒有 - 仍然是同樣的錯誤 - 語法錯誤 –

0

我已經在我需要parenthesise該聯盟的兩面過去發現 - 請嘗試以下操作:

SELECT X.field1, X.field2 
FROM 
(
    (SELECT t1.field1, t1.field2, t1.field3 
    FROM table1 t1 
    INNER JOIN table3 t3 ON t1.id=t3.id) 

    UNION ALL 

    (SELECT t2.field1, t2.field2, t2.field3 
    FROM table2 t2 
    INNER JOIN table4 t4 ON t2.id=t4.id) 

) as x 
WHERE x.field3=1