我正在尝试编写一个适用于MySQL和SQLite的SQL UNION。
(select_clause_A) UNION (select_clause_B)
SQLite不喜欢这些语句的括号(参见 '复合操作员'): http://www.sqlite.org/lang_select.html
不幸的是,如果您使用的话,我认为MySQL需要使用括号 'order by'条款: http://dev.mysql.com/doc/refman/5.0/en/union.html
有没有人碰巧知道哪个数据库遵循SQL标准?我想它们都可能......
答案 0 :(得分:14)
UNION语句中不需要括号/括号。
MySQL是我目前唯一知道的,它允许您定义特定于每个查询的ORDER BY
和LIMIT
条款,只要查询括在括号中 - 标准SQL只允许ORDER BY
表示最终结果。 GROUP BY
和HAVING
子句特定于构成UNION'd语句的每个查询。
(SELECT a.column
FROM A_TABLE a
ORDER BY a.column DESC)
UNION
SELECT b.column
FROM B_TABLE b
...如果你想/需要移植到其他数据库,这将不会导致悲伤。
SELECT a.column
FROM A_TABLE a
UNION
SELECT b.column
FROM B_TABLE b
ORDER BY column DESC
答案 1 :(得分:4)
MySQL不需要parens,从我可以告诉读的规格不应该在那里。
MySQL也是非标准的,因为它在联合的每个“部分”中都支持ORDER BY,所以如果你是为非MySQL编写它,那么无论如何都不能这样做。
答案 2 :(得分:1)
您可以在SQLite中执行此操作:
select col1, col2.. from ( select col1, col2 from T order by col1 limit 5)
union
select col1, col2.. from ( select col1, col2 from T order by col2 desc limit 10)
不确定mySQl。