2012-10-09 54 views
2

的多個UNION查詢:多UNION查詢不起作用

SELECT [Ordine numero] AS ordine, [data ordine] AS data, comm AS commessa 
FROM [archivio globale] 
WHERE [ordine numero] IS NOT NULL 

UNION 

SELECT [numero ordine cliente] AS ordine, [data ordine cliente] AS data, numero AS commessa 
FROM [ricambi] 
WHERE [numero ordine cliente] IS NOT NULL 

UNION 

SELECT [numero ordine cliente] AS ordine, [data ordine cliente] AS data, numero AS commessa 
FROM [trasferte] 
WHERE [numero ordine cliente] IS NOT NULL 

ORDER BY [ordine]; 

它不工作,我得到的錯誤信息:

[mysql][odbc 5.1 Driver][mysqld-5.5.14]You have an error in your SQL syntax ...

雖然單個UNION查詢工作正常(沒有第二次聯合聲明)?該怎麼辦?

回答

1

您已將您的問題標記爲MySQL,並且您正在使用方括號[]。據我所知,方括號是而不是對MySQL有效,並且只對Microsoft產品(SQL Server/MS Access)有效。因此,如果您需要附上表格/列名稱,請使用反引號`

From the documentation:

的標識符引號字符是反引號(「`」):

所以我覺得您的查詢應該是:

SELECT `Ordine numero` AS ordine, `data ordine` AS data, comm AS commessa 
FROM `archivio globale` 
WHERE `ordine numero` IS NOT NULL 

UNION ALL 

SELECT `numero ordine cliente` AS ordine, `data ordine cliente` AS data, numero AS commessa 
FROM `ricambi` 
WHERE `numero ordine cliente` IS NOT NULL 

UNION ALL 

SELECT `numero ordine cliente` AS ordine, `data ordine cliente` AS data, numero AS commessa 
FROM `trasferte` 
WHERE `numero ordine cliente` IS NOT NULL 

ORDER BY `ordine`; 

編輯,如果你是使用MS Access,那麼您將需要使用方括號:

SELECT * 
FROM 
(
    SELECT [Ordine numero] AS ordine, [data ordine] AS data, comm AS commessa 
    FROM [archivio globale] 
    WHERE [ordine numero] IS NOT NULL 

    UNION ALL 

    SELECT [numero ordine cliente] AS ordine, [data ordine cliente] AS data, numero AS commessa 
    FROM [ricambi] 
    WHERE [numero ordine cliente] IS NOT NULL 

    UNION ALL 

    SELECT [numero ordine cliente] AS ordine, [data ordine cliente] AS data, numero AS commessa 
    FROM [trasferte] 
    WHERE [numero ordine cliente] IS NOT NULL 
) x 
ORDER BY [ordine]; 
+0

我複製上面的查詢(我使用Access),但我得到了同樣的錯誤1064 – user1732326

+0

@ user1732326什麼數據庫,你的工作,你所標記的作爲MySQL的問題,但你現在說的是Access?每種產品的語法可能不同。請澄清。 – Taryn

+0

方括號或反引號的結果相同;一個UNION ALL語句有效,兩個NOT – user1732326

1

這是一個MyODBC錯誤,請參閱offical entry here。截至今天,它仍然是開放的...

[編輯]我找到了一個簡單的解決方案:myODBC只會理解查詢與一個UNION(或UNION ALL)。所以你必須用()包裝UNION的右邊部分。另外,你必須先結束每個查詢與;,像這樣:

SELECT [Ordine numero] AS ordine, [data ordine] AS data, comm AS commessa 
FROM [archivio globale] 
WHERE [ordine numero] IS NOT NULL; 

UNION ALL (

SELECT [numero ordine cliente] AS ordine, [data ordine cliente] AS data, numero AS commessa 
FROM [ricambi] 
WHERE [numero ordine cliente] IS NOT NULL; 

UNION ALL 

SELECT [numero ordine cliente] AS ordine, [data ordine cliente] AS data, numero AS commessa 
FROM [trasferte] 
WHERE [numero ordine cliente] IS NOT NULL 
); 

,當然還有,你必須採用同樣的方法來這一部分了。舉例來說,如果你需要一個更UNION ALL在您查詢:

SELECT [Ordine numero] AS ordine, [data ordine] AS data, comm AS commessa 
FROM [archivio globale] 
WHERE [ordine numero] IS NOT NULL; 

UNION ALL (

SELECT [numero ordine cliente] AS ordine, [data ordine cliente] AS data, numero AS commessa 
FROM [ricambi] 
WHERE [numero ordine cliente] IS NOT NULL; 

UNION ALL (

SELECT [numero ordine cliente] AS ordine, [data ordine cliente] AS data, numero AS commessa 
FROM [trasferte] 
WHERE [numero ordine cliente] IS NOT NULL; 

UNION ALL 

SELECT [numero ordine cliente] AS ordine, [data ordine cliente] AS data, numero AS commessa 
FROM [xxx] 
WHERE [numero ordine cliente] IS NOT NULL 
)); 
+0

你可以做的是創建每個單獨的quieies中的paire(在Access中),然後將它們合併到其他quieres中。只要每個查詢沒有超過一個聯合就可以工作。 – Pat

+0

你應該在答案中編輯你的評論 –