SQL标准在SQL UNION/EXCEPT/INTERSECT语句中对括号的说法是什么?

Eri*_*son 5 mysql sql sqlite

我正在尝试编写一个适用于MySQL和SQLite的SQL UNION.

(select_clause_A) UNION (select_clause_B)
Run Code Online (Sandbox Code Playgroud)

SQLite不喜欢这些语句的括号(参见'复合操作符'):http://www.sqlite.org/lang_select.html

不幸的是,如果您使用'order by'子句,我认为MySQL需要括号:http: //dev.mysql.com/doc/refman/5.0/en/union.html

有谁碰巧知道哪个数据库遵循SQL标准?我想它们都可能......

OMG*_*ies 14

UNION语句中不需要括号/括号.

MySQL是唯一一个我所知道的在这一刻,它允许您定义ORDER BYLIMIT作为查询方括号括起来具体到每个查询,只要条款-标准SQL只允许ORDER BY对最终结果.在GROUP BYHAVING条款是特定于拼成的UNION'd语句中的每个查询.

MySQL支持:

 (SELECT a.column
    FROM A_TABLE a
ORDER BY a.column DESC)
UNION
SELECT b.column
  FROM B_TABLE b
Run Code Online (Sandbox Code Playgroud)

...如果您想要/需要移植到其他数据库,这将不会导致悲伤的结束.

标准SQL仅允许:

SELECT a.column
  FROM A_TABLE a
UNION
SELECT b.column
  FROM B_TABLE b
ORDER BY column DESC
Run Code Online (Sandbox Code Playgroud)