2015-05-13 197 views
1

我試圖執行這個查詢:如何使用MySQL UNION內UNION ALL

(
SELECT co.id as offerId, co.title, co.details, co.link, co.reference, co.rank 
FROM club_offer co 
WHERE co.id IN (31, 791, 360, 382) 
GROUP BY offerId 
UNION 
SELECT co.id as offerId, co.title, co.details, co.link, co.reference, co.rank 
FROM club_offer co 
WHERE co.id IN (869, 376, 201, 1246) 
GROUP BY offerId 
ORDER BY rank DESC 
) 
UNION ALL 
(
SELECT co.id as offerId, co.title, co.details, co.link, co.reference, co.rank 
FROM club_offer co 
WHERE co.id IN (117, 168, 193, 204, 330, 377, 378, 379, 380, 381, 452, 931, 980, 1100, 1146, 1147, 1190, 1247) 
GROUP BY offerId 
ORDER BY rank DESC 
) 

,但我得到的錯誤:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNION

所以,我想,要麼我使用錯誤的語法或我正在嘗試做一些無法完成的事情。我猜這個SQL小提琴不需要這個,很有可能有經驗的人會馬上看到什麼是錯的。

有人可以幫忙嗎?謝謝

+0

刪除'ORDER BY's – Lamak

+0

沒有幫助..... –

+2

爲什麼GROUP BY時,沒有聚合函數被使用?此外,MySQL可以在GROUP BY中使用別名嗎? – jarlh

回答

2

您的錯誤來自您的括號。這裏有一種方法來重寫你的當前查詢:

SELECT offerId, title, details, link, reference, rank 
FROM 
(
    SELECT co.id as offerId, co.title, co.details, co.link, co.reference, co.rank 
    FROM club_offer co 
    WHERE co.id IN (31, 791, 360, 382) 
    UNION 
    SELECT co.id as offerId, co.title, co.details, co.link, co.reference, co.rank 
    FROM club_offer co 
    WHERE co.id IN (869, 376, 201, 1246) 
) t 
UNION ALL 
SELECT co.id as offerId, co.title, co.details, co.link, co.reference, co.rank 
FROM club_offer co 
WHERE co.id IN (117, 168, 193, 204, 330, 377, 378, 379, 380, 381, 
       452, 931, 980, 1100, 1146, 1147, 1190, 1247) 
ORDER BY rank DESC 

我已經刪除從內部查詢group byorder by條款,以及 - 隨時根據需要加回,但子查詢中的order by將毫無用處。

+0

它的作品,非常感謝你! –

0

您正在以錯誤的方式使用parentesis:您放入代碼的方式似乎是您嘗試在選擇unioned statmets之間建立優先順序,而這是語法所不允許的。但因爲是由提及的評析某人時,你可以:

select * from 
    (select ... from ... 
    union 
    select ... from ...) as T1 
union all 
    select ... from ... 

凡工會/工會的各方面都是單queryes。

一些小問題:
order by如果沒有限制子句存在,每個select中都沒有意義。
不是在所有情況下group by(用mysql hability錯過分組功能)會導致同樣的結果distinct