Пара очень простых вопросов по SQL
2. Да.
2) Конечно, допустима. Только с таким условием, как у тебя, GROUP BY field1,field2 не имеет никакого смысла, всё равно field2 не меняется - можно было бы напистаь и GROUP BY field1. Да, такое замечание - если хочешь сравнивать не просто поля, а всякие там max-ы, sum-ы итп (которые появляются уже после группировки) - пиши их в having, синтаксис такой же, как и у where. Например, select students.* from students_scores,students where students.id = students_scores.student_id and student.country = 'ru' group by students.id having avg(students_scores.score) > 4.
Надо понять, что делает один скрипт, но мне незнаком синтаксис вот в каком его месте:
SELECT client.Client_ID, Sum([Total_sum]*-1) AS Tot_End, Account.Stock_ID
FROM Account INNER JOIN client ON Account.Source_ID = client.Client_ID
WHERE Account.Operation_Date)<=[Oper_date]
GROUP BY client.Client_ID, Account.Stock_ID;
А именно вопрос такой: какую роль играют квадратные скобки, заключающие в себя имена полей Total_sum и Oper_date? Я знаю только один вариант применения квадр.скобок к имени поля - если оно содержит недопустимые символы вроде пробелов. Но тут наверняка что-то другое, а я хз что. (
имеет смысл в ее доках полазать
Скорее всего, имелся в виду MS Access или MS SQL Server.
Я знаю только один вариант применения квадр.скобок к имени поля - если оно содержит недопустимые символы вроде пробеловДаже это - не по стандарту
brackets are used when table/column names contain spaces or keywords.in
other cases brackets may be used also but also could be avoided.
The ANSI standard delimiter is to use double quotes which works in TSQLmsdn
assuming the QUOTED_IDENTIFIER option is ON. [] is an alternative notation
used in Access and SQLServer.
Просто в следующем куске того же скрипта конструкция почти такая же, но там под скобками Sum стоит ясное и понятное Account.Total_sum. И тогда зачем автор использовал подряд 2 разных стиля?
Если же [Total_sum] - действительно просто имя поля, то как оно может быть использовано без имени таблицы, к которой относится? Если бы было выражение [Account].[Total_sum]*(-1 все было бы хорошо.
Если столбец есть в одной из таблиц, то допускается использование его имени без указания имени таблицы из которой он.
Если столбец есть в одной из таблиц, то допускается использование его имени без указания имени таблицы из которой он.уточню: есть ТОЛЬКО в одной из таблиц
т.е. если в двух таблицах есть такое поле - то непонятно из какой таблицы мы имеем ввиду и тогда надо указывать
select a, b, (select a from (select 1 a from dual union all select 2 a from dual) where A=b) c from (select 1 a, 2 b from dual)
Запрос без проблем отработает.

Контрпримерну не совсем
противоречия с моим нету
Ну, если к словам придираться, то не "надо указывать", а "надо указывать, но не всегда обязательно".
Оставить комментарий
Volshebnaya
<понимаю, что оба вопроса проще проверить практикой, но сейчас мне не на чем проверить, а мануалов нет под рукой>Вопрос 1: можно ли использовать встроенное представление как один из операндов в соединении таблиц и давать ему имя? То есть допустима ли такая конструкция?
Вопрос 2: можно ли использовать в одном и том же запросе GROUP BY и WHERE?
То есть допустима ли такая конструкция: