Что стандарт SQL говорит о скобках в операторах SQL UNION / EXCEPT / INTERSECT? - PullRequest
5 голосов
/ 11 января 2011

Я пытаюсь написать SQL UNION, который работает как на MySQL, так и на SQLite.

(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? Я полагаю, это возможно, они оба ...

Ответы [ 3 ]

14 голосов
/ 11 января 2011

Нет необходимости в скобках / скобках в операторе UNION.

MySQL - единственный, о котором я знаю в данный момент, который позволяет вам определять предложения ORDER BY и LIMIT, специфичные для каждого запроса, если запрос заключен в скобки - стандартный SQL допускает ORDER BY за конечный результат. Предложения GROUP BY и HAVING специфичны для каждого запроса, составляющего оператор UNION.

MySQL поддерживает:

 (SELECT a.column
    FROM A_TABLE a
ORDER BY a.column DESC)
UNION
SELECT b.column
  FROM B_TABLE b

... что не вызовет конца горя, если вы хотите / должны портировать на другие базы данных.

Стандартный SQL допускает только:

SELECT a.column
  FROM A_TABLE a
UNION
SELECT b.column
  FROM B_TABLE b
ORDER BY column DESC
4 голосов
/ 11 января 2011

Паренсы не должны быть обязательными для MySQL, и, насколько я могу судить, чтение спецификации не должно быть там.

MySQL также нестандартен в том смысле, что поддерживает ORDER BY в каждой «части» объединения, поэтому, если вы пишете его для не-MySQL, вы все равно не сможете этого сделать.

1 голос
/ 11 января 2011

Вы можете сделать это в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...