Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Горячая тема (более 10 ответов) группировка по коду и родителю (число прочтений - 5661 )
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: группировка по коду и родителю
Ответ #15 - 21. Декабря 2008 :: 09:51
Печать  
vovan519 писал(а) 19. Декабря 2008 :: 20:51:
Пока еще не осознал тонкость и порядок выполнения подзапросов, но думаю разберусь. Спасибо за пример, осталось понять разницу.
Ну и пока не понял зачем у тебя WHERE в подзапросе.
Но в любом случае буду экспериментировать в понедельник.
Кстати мой запрос на 70.000 записях отрабатывает меньше секунды. Наверно буду мерить точнее, чтоб увидеть разницу.

WHERE  - не нужен просто с твоего поста скопировал и непроверил.

Код
Выбрать все
SELECT Спр_000.ID [Элемент $Справочник."+ТекСправочник+"], Спр_000.Code as Код,Спр_000.ParentExt
FROM   $Справочник."+ТекСправочник+" as Спр_000
inner join (
	     SELECT Спр1.Code, Спр1.ParentExt, COUNT(*)
	     FROM   $Справочник."+ТекСправочник+" as Спр1
	     GROUP  BY Спр1.ParentExt, Спр1.Code
	     HAVING COUNT(*) > 1
) as tabl_1 on   Спр_000.ParentExt = tabl_1.ParentExt
		and  Спр_000.Code	= tabl_1.Code
ORDER  BY Спр_000.ParentExt,Спр_000.Code 


  
Наверх
 
IP записан
 
vovan519
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 24
Зарегистрирован: 18. Декабря 2008
Re: группировка по коду и родителю
Ответ #16 - 22. Декабря 2008 :: 12:03
Печать  
No column was specified for column 3 of 'tabl_1
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: группировка по коду и родителю
Ответ #17 - 22. Декабря 2008 :: 13:21
Печать  
vovan519 писал(а) 22. Декабря 2008 :: 12:03:
No column was specified for column 3 of 'tabl_1

Код
Выбрать все
SELECT Спр_000.ID [Элемент $Справочник."+ТекСправочник+"], Спр_000.Code as Код,Спр_000.ParentExt
FROM   $Справочник."+ТекСправочник+" as Спр_000
inner join (
	     SELECT Спр1.Code, Спр1.ParentExt, COUNT(*) as aaa_111
	     FROM   $Справочник."+ТекСправочник+" as Спр1
	     GROUP  BY Спр1.ParentExt, Спр1.Code
	     HAVING COUNT(*) > 1
) as tabl_1 on   Спр_000.ParentExt = tabl_1.ParentExt
		and  Спр_000.Code	= tabl_1.Code
ORDER  BY Спр_000.ParentExt,Спр_000.Code
 




или можно вообще убрать столбец count(*), оставив только
условие HAVING COUNT(*) > 1. Так будет даже теоретически  чуть даже чуть быстрее.
  
Наверх
 
IP записан
 
vovan519
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 24
Зарегистрирован: 18. Декабря 2008
Re: группировка по коду и родителю
Ответ #18 - 22. Декабря 2008 :: 14:23
Печать  
Z1 Огромное спасибо. Попробую подвести итог.

SELECT Спр1.ID [Элемент $Справочник."+ТекСправочник+"], Спр1.Code as Код, Спр1.ParentExt as Владелец
FROM   $Справочник."+ТекСправочник+" as Спр1
WHERE  EXISTS
   (SELECT Спр2.Code, Спр2.ParentExt, COUNT(*)
    FROM   $Справочник."+ТекСправочник+" as Спр2
    WHERE  Спр1.Code = Спр2.Code
    GROUP  BY Спр2.ParentExt, Спр2.Code
    HAVING COUNT(*) > 1)
ORDER BY Спр1.ParentExt, Спр1.Code
В этом, моем запросе, подзапрос выполняется для каждой стороки основного запроса. В твоем запросе создаются отдельно две таблицы и объединяются при совпадении и наличии соответсвующих значений.
  
Наверх
 
IP записан
 
vovan519
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 24
Зарегистрирован: 18. Декабря 2008
Re: группировка по коду и родителю
Ответ #19 - 22. Декабря 2008 :: 14:24
Печать  
Соответственно твой запрос быстрее. Так?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: группировка по коду и родителю
Ответ #20 - 22. Декабря 2008 :: 14:50
Печать  
vovan519 писал(а) 22. Декабря 2008 :: 14:24:
Соответственно твой запрос быстрее. Так?

Да мой запрос из (18) быстрее запроса из (4).
В запросе ( 4 ) берется большая таблиуа и для каждой ее
строки строим еще один select.
т.е если у тебя 100 000 строк то будет 100 000 подзапросов.
в Варианте 18
есть таблица из 100 000
одним select создали все  соды c кратностью больше 1
и вторым selectom сделали внутренее сооденение ( всего 2 select)
и причем второй select ничего не вычисляет а нужен для более красивого вывода информации.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать