Форум: "Базы";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];
ВнизСинтаксис SQL. Проблема при использованиии групировки Найти похожие ветки
← →
SergP (2003-12-09 11:44) [0]Нужно выполнить поиск по форуму (прога-клиент форума) например всех топиков где общался vasyaPupkin.
Запрос такого типа:
select a.topic_id,a.uid,a.forum_id,a.title
from topics as a,posts as b,users as c
where a.topic_id=b.topic_id and b.uid=c.uid and c.login="vasyaPupkin"
group by a.topic_id order by a.top_time desc
не проходит, так как вылезает ругательство на то что не используются статистические функции. (ругается естественно на все поля кроме a.topic_id). Если не использовать группировку то я получаю по несколько одинаковых записей. Все это понятно.
Поэтому чтобы получить остальные поля таблицы в моем запросе, приходится применять вложенный запрос:
select a.*
from topics as a,(
select a.topic_id
from topics as a,posts as b,users as c
where a.topic_id=b.topic_id and b.uid=c.uid and c.login="vasyaPupkin"
group by a.topic_id
) as b"
+" where a.topic_id=b.topic_id order by a.top_time desc";
т.е. сначала я "достаю" только поле topic_id и делаю по нему группировку. А потом используя ту же таблицу достаю остальные поля.
Но мне кажется что я чего-то не знаю, поэтому приходится использовать вложенный запрос. Можно ли обойтись одним простым запросом?
Можно ли при групировке по одному полю, "вытягивать" также и другие поля без статистических функций? Или какие функции можно использовать, если групируемые записи полностью одинаковые. Т.е. просто нужно избавиться от дублирования.
ну насчет чисел в крайнем случае можно можно поставить функцию максимума или минимума (все равно они все одинаковые). А что делать с строковыми полями и полями memo?
← →
Alex_Bredin (2003-12-09 11:47) [1]а что мешает внести эти самые поля в раздел GROUP BY?
← →
Silver Alex (2003-12-09 12:01) [2]
> Т.е. просто нужно избавиться от дублирования.
distinct не подходит?
← →
SergP (2003-12-09 12:08) [3]Кстати забыл указать: юзаю АДО, провайдер:
Microsoft.Jet.OLEDB.4.0
> Silver Alex © (09.12.03 12:01) [2]
>
> > Т.е. просто нужно избавиться от дублирования.
>
> distinct не подходит?
А как им пользоваться?
← →
Silver Alex (2003-12-09 12:15) [4]select distinct a.topic_id,a.uid,a.forum_id,a.title
from topics as a,posts as b,users as c
where a.topic_id=b.topic_id and b.uid=c.uid and c.login="vasyaPupkin"
← →
Alex_Bredin (2003-12-09 12:19) [5]2 SergP
в данном случае без разницы чем пользуешься
вот так примерно
select a.topic_id,a.uid,a.forum_id,a.title
from topics as a,posts as b,users as c
where a.topic_id=b.topic_id and b.uid=c.uid and c.login="vasyaPupkin"
group by a.topic_id,a.uid,a.forum_id,a.title
order by a.top_time desc
а в твоем случае ругается потому, что
When a GROUP BY clause is used, all table columns in the SELECT clause of the query must meet at least one of the following criteria, or it cannot be included in the SELECT clause:
Be in the GROUP BY clause of the query.
Be in the subject of an aggregate function.
← →
sniknik (2003-12-09 12:30) [6]> Можно ли при групировке по одному полю, "вытягивать" также и другие поля без статистических функций? Или какие функции можно использовать, если групируемые записи полностью одинаковые. Т.е. просто нужно избавиться от дублирования.
First(), Last()
← →
SergP (2003-12-09 12:33) [7]ну почему оно ругается то я понимаю.
А насчет остального - спасибо всем. Попробую оба варианта.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.028 c