Здравствуйте, KGP! Вы писали:
K> есть три таблицы с полем field1 double K> select avg(field1) по всем трём таблицам ... ? K> без временных таблиц соответственно, используя union ...
Была такая идея
SELECT AVG(FIELD1) FROM
(
SELECT FIELD1 FROM TABLE1
UNION
SELECT FIELD1 FROM TABLE2
UNION
SELECT FIELD1 FROM TABLE3
) AS D
но сервер отказался такое кушать... А иначе одним запросом вроде никак...
Здравствуйте, GarryIV, Вы писали:
GIV>но сервер отказался такое кушать... А иначе одним запросом вроде никак...
Какой сервер-то? И почему кушать отказался?
MSSQL это слямзил в три секунды.
Здравствуйте, Merle! Вы писали:
GIV>> но сервер отказался такое кушать... А иначе одним запросом вроде GIV>> никак... M> Какой сервер-то?
IBM AS/400 DB2 5.2
M> И почему кушать отказался?
=========Beginning of the citation==============
Cause . . . . . : The keyword UNION was not expected here. A syntax error
was detected at keyword UNION. The partial list of valid tokens is ). This
list assumes that the statement is correct up to the unexpected keyword.
The error may be earlier in the statement but the syntax of the statement
seems to be valid up to this point.
=========The end of the citation================
Здравствуйте, KGP, Вы писали:
KGP>все верно ... я пробовал без ... AS D KGP>а как это обосновать ? что гуру скажут (внутренние заморочки MS SQL Server или SQL стандарта)
Стандарта, да и вообще реляционной теории.
Выражение (select...) является вполне самостоятельной таблицей, пусть и существуящей только на время запроса. Надо же ее как-то именовать?
Поскольку своего имени нет, то в данном случае наличие алиаса является обязательным требованием.
Помоему это достаточно ясно описано в документации.
Здравствуйте, Merle, Вы писали:
M>Выражение (select...) является вполне самостоятельной таблицей, пусть и существуящей только на время запроса. Надо же ее как-то именовать?
зачем ? M>Поскольку своего имени нет, то в данном случае наличие алиаса является обязательным требованием. M>Помоему это достаточно ясно описано в документации.
Где ... это не придирка с моей стороны ... M>Стандарта, да и вообще реляционной теории.
Сомнения у меня по поводу стандарста SQL ... вот camel писал, что
select avg(field1)
from
(
(select field1 from t1) union all
(select field1 from t2) union all
(select field1 from t3)
)
у Oracle работает ... без as D
в тоже время IBM AS/400 DB2 5.2 тоже нюанс имеет ...
Здравствуйте, KGP, Вы писали:
KGP>зачем ?
Чтобы отличать от других таблиц в запросе.
M>>Стандарта, да и вообще реляционной теории. KGP>Сомнения у меня по поводу стандарста SQL ...
Здравствуйте, Merle, Вы писали:
M>Чтобы отличать от других таблиц в запросе.
1) В предложенном не было других таблиц
2) символ [ — опционально ... может быть и может не быть, то почему не работает без него ?
Здравствуйте, KGP, Вы писали:
KGP>Здравствуйте, Merle, Вы писали:
M>>Чтобы отличать от других таблиц в запросе. KGP>1) В предложенном не было других таблиц
Но они могли быть. Необязательными являются только те ключевые слова и параметры, которые не при каких обстоятельствах не могут потребоваться.
KGP>2) символ [ — опционально ... может быть и может не быть, то почему не работает без него ?
Ну я же специально выделил!
После <derived tables> (подзапрос), <correlation name> (алиас) в квадратные скобочки не взят, то есть является обязательным параметром.
<correlation name> взят в "[]", только после обычной таблицы.