我正在尝试执行此查询:
(
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
)
但我得到错误:
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 在'UNION
附近
所以,我猜我要么使用错误的语法,要么我正在尝试做一些无法做到的事情。我想这不需要SQL小提琴,很可能有经验的人会马上看到错误。
有人可以帮忙吗?感谢
答案 0 :(得分: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 by
和order by
子句 - 可以根据需要随意添加,但子查询中的order by
将毫无用处。
答案 1 :(得分:0)
您正在以错误的方式使用parentesis:您放入代码的方式似乎是您尝试在选择联合状态之间建立优先顺序,并且语法不允许这样做。但正如一些人对冥想的提及,你可以:
select * from
(select ... from ...
union
select ... from ...) as T1
union all
select ... from ...
union / union的所有方都是单个查询。
一些小问题:
如果不存在限制条款,则每个选择内的order by
都没有意义
并非在所有情况下group by
(使用mysql hability错过分组函数)会产生与distinct