Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2010, 15:54   #1
lola_lola
Новичок
Джуниор
 
Регистрация: 08.02.2010
Сообщений: 1
По умолчанию Не получается запрос

Здравствуйте! Помогите, пожалуйста.
Есть таблицы table1(поле field1) и table2(поле field2).
Код:
SELECT a.field1, b.field2 
FROM table1 as a, table2 as b
WHERE a.field1=b.field3 
GROUP BY a.field1;
Выводится ошибка "Попытка выполнить запрос, не включающий field2 как часть статической функции". в чем ошибка?

Последний раз редактировалось Stilet; 08.02.2010 в 16:29.
lola_lola вне форума Ответить с цитированием
Старый 08.02.2010, 16:19   #2
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

Код:
SELECT a.field1, b.field2 
FROM table1 as a, table2 as b
WHERE a.field1=b.field3 
GROUP BY a.field1,b.field2 ;
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 11.02.2010, 19:16   #3
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Интересно, зачем в запросе это предложение GROUP BY?
Цитата:
Использование предложения GROUP BY имеет смысл только при наличии в списке возвращаемых элементов предложения SELECT хотя бы одного вычисляемого столбца или агрегатной функции.
Скандербег вне форума Ответить с цитированием
Старый 12.02.2010, 00:21   #4
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от Скандербег Посмотреть сообщение
Интересно, зачем в запросе это предложение GROUP BY?
как вариант, можно вывести список уникальных значений или уникальных сочетаний (то же самое можно сделать без группировки + указать после слова select distinct)
soleil@mmc вне форума Ответить с цитированием
Старый 12.02.2010, 06:55   #5
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Тем не менее, предложение CROUP BY в приведенном запросе ничего не делает, как ему и предписано - не "выводит список уникальных значений или уникальных сочетаний". Проверено на MS SQL и Firebird.
По поводу DISTINCT присоединяюсь, здесь возразить нечего.
Скандербег вне форума Ответить с цитированием
Старый 12.02.2010, 10:11   #6
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от Скандербег Посмотреть сообщение
Тем не менее, предложение CROUP BY в приведенном запросе ничего не делает, как ему и предписано
чтобы говорить предметно - уточни сам запрос
а то в теме их 2 и оба кривоватые
а еще лучше привести данные для проверки
soleil@mmc вне форума Ответить с цитированием
Старый 12.02.2010, 11:01   #7
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Текст запроса без привязки к базе и ее таблицам не имеет смысла. Я проверил работу GROUP BY по поводу возврата "уникальных значений" в двух СУБД - результат отрицательный, мне этого достаточно.
Если есть сомнения, нет ничего проще сделать такую проверку самому на своем материале.
А "кривоватость" приведенных запросов только в ненужном предложении ORDER BY.
Кстати, наличие этого предложения в запросах, похожих на приведенные, при тестирование дает ошибку (Firebird):
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)
Скандербег вне форума Ответить с цитированием
Старый 12.02.2010, 12:45   #8
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

в принципе, такой разговор ни о чем получается

Оракл 10ка
тестовый набор данных (можете реализовать в любой субд через вьюху, оракл позволяет это делать на лету)

Код:
with
  table1 as (
  select 1 field1 from dual union all
  select 2 from dual union all
  select 3 from dual union all
  select 4 from dual union all
  select 5 from dual union all
  select 6 from dual union all
  select 2 from dual
  ),
  table2 as (
  select 1 field3, 'xxx' field2 from dual union all
  select 2, 'axx' from dual union all
  select 3, 'abx' from dual union all
  select 2, 'abx' from dual union all
  select 3, 'acx' from dual union all
  select 4, 'acx' from dual union all
  select 5, 'aex' from dual union all
  select 2, 'azx' from dual union all
  select 2, 'awx' from dual
  )
поскольку ТС не приводил типов полей, то я себе позволил такую трактовку типов полей

теперь запрос
Код:
select 
  a.field1, 
  b.field2 
from 
  table1 a, 
  table2 b
where a.field1 = b.field3
group by a.field1, b.field2
order by 1
нормально выполняется и выдает след.результат
Цитата:
field1 field3
1 xxx
2 abx
2 awx
2 axx
2 azx
3 abx
3 acx
4 acx
5 aex
теперь убираем предложение групбай и смотрим на результат
Код:
select 
  a.field1, 
  b.field2 
from 
  table1 a, 
  table2 b
where a.field1 = b.field3
order by 1
Цитата:
field1 field3
1 xxx
2 axx
2 axx
2 azx
2 abx
2 awx
2 awx
2 azx
2 abx
3 abx
3 acx
4 acx
5 aex
разница заметна невооруженным взглядом

Последний раз редактировалось soleil@mmc; 12.02.2010 в 13:40. Причина: сделал раскраску
soleil@mmc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не получается выполнить запрос artemavd БД в Delphi 14 06.08.2009 20:44
БД, Запрос на приход/расход, не получается задействовать несколько обьектов kvadratnt Помощь студентам 0 06.06.2009 15:23
не получается запрос с inner join :mad: Только_Учусь SQL, базы данных 16 21.07.2008 09:40
запрос ссылается на несвязанный с ним запрос kolebatel SQL, базы данных 0 11.06.2008 12:50
Не получается..... Delpher HTML и CSS 2 25.12.2007 13:17