|
|
|
Рекурсия в запросе | ☑ | ||
|---|---|---|---|---|
|
0
DRAGO
11.03.09
✎
14:27
|
Можно сделать рекурсию в запросе. Напримерпо затратам, если есть по определенной затрате сведения, то и ее перебирать и т.д.
|
|||
|
1
Salvador Limones
11.03.09
✎
14:28
|
Как?
Расскажи! |
|||
|
2
DRAGO
11.03.09
✎
14:29
|
Это вопрос...
|
|||
|
3
vde69
11.03.09
✎
14:29
|
(0) нельзя, да и глупость это несусветная...
(1) можно сделать рекурсию в ХП но это то-же глупость будет |
|||
|
4
H A D G E H O G s
11.03.09
✎
14:30
|
(0) Что такое рекурсия?
|
|||
|
5
DRAGO
11.03.09
✎
14:30
|
почему глупость. Как же тогда построить отчет? Только перебором?
|
|||
|
6
DmitrO
11.03.09
✎
14:32
|
В 8ке нельзя, в MSSQL 2005 можно.
(3) ух ты.. категорично, и очень уверено.. "а мужики-то незнают" |
|||
|
7
vde69
11.03.09
✎
14:32
|
(5) почитай про реляционные базы, про JOIN и т.д.
учи язык запросов |
|||
|
8
Salvador Limones
11.03.09
✎
14:32
|
(2) Блиннн, не увидел в теме знаков вопроса. Думал, ты сейчас мастер-класс рекурсии в запросе покажешь.
|
|||
|
9
hhhh
11.03.09
✎
14:33
|
(5) как все отчеты строятся, так и этот построй. Какое отношение рекурсия имеет к отчету. Наверно, ты про расшифровку спрашивал, а не про рекурсию.
|
|||
|
10
i-rek
11.03.09
✎
14:34
|
В СКД можно некоторым образом
|
|||
|
11
vde69
11.03.09
✎
14:35
|
(6) до 2005 существовал предел на 255 таблиц, это главное было
|
|||
|
12
Новиков
11.03.09
✎
14:35
|
в языке запросов рекурсии нет. И слава б-гу!
|
|||
|
13
DRAGO
11.03.09
✎
14:36
|
ПРОДУКЦИЯ |Сумма
| | ---Затрата | | | ----Затрата | | | --- .... | ВО КАК ХОТЯТ ВИДЕТЬ! Все к одному регистру. |
|||
|
14
Sadovnikov
11.03.09
✎
14:36
|
(12) Еще как есть.
|
|||
|
15
DRAGO
11.03.09
✎
14:38
|
ну блин намекните хоть как это должно быть
|
|||
|
16
Новиков
11.03.09
✎
14:38
|
(15) :) еще как нет
|
|||
|
17
Sadovnikov
11.03.09
✎
14:39
|
(16) Ну-ну. BOL полистай.
|
|||
|
18
Новиков
11.03.09
✎
14:42
|
в 8-шном языке запросе полистать BOL? Страничку в желтой книжке не подскажешь? :)
|
|||
|
19
Sadovnikov
11.03.09
✎
14:43
|
(18) А в восьмерке - язык запросов?? Убожество там, а не запросы.
|
|||
|
20
DRAGO
11.03.09
✎
14:43
|
А что такое BOL?
|
|||
|
21
Новиков
11.03.09
✎
14:44
|
(19) а автор поста на чем пишет? на T-SQL?
|
|||
|
22
Sadovnikov
11.03.09
✎
14:44
|
(20) Books Online
|
|||
|
23
Sadovnikov
11.03.09
✎
14:45
|
(21) Вот честно - мне пофиг на чем автор пишет. Ты в (12) про это не уточнял :)
|
|||
|
24
DRAGO
11.03.09
✎
14:45
|
Я пишу на языке 8.1. Вопрос повторять?
|
|||
|
25
Sadovnikov
11.03.09
✎
14:46
|
(24) Да не обращай внимания. Это мы так, между собой пикировкой увлеклись.
|
|||
|
26
Sadovnikov
11.03.09
✎
14:47
|
(24) А по теме - из (0) и (13) абсолютно непонятно чего тебе нужно и в чем именно проблема. Постарайся выдать побольше информации.
|
|||
|
27
Новиков
11.03.09
✎
14:47
|
(24) в языке запросов 8.1. рекурсии нет и не было никогда. Товарищ Садовников вещает, что если бы ты лабал на чистом скуле - тогда сии возможности бы теоретически тебе помогли. На практике - сложно сказать.
|
|||
|
28
Sadovnikov
11.03.09
✎
14:48
|
(27) "возможности бы теоретически тебе помогли" - э нет. Не писал я такого. Очень сомневаюсь что стоит использовать рекурсию в скуле. Особенно с ее ограничением на 32 уровня вложенности.
|
|||
|
29
DRAGO
11.03.09
✎
14:48
|
Продукция состоит из полуфабрикатов, а полуфабрикаты в свою очередь тоже из них и т.д. Нужно перебрать все в глубь и собрать затраты.
|
|||
|
30
Новиков
11.03.09
✎
14:50
|
(29) ну что могу сказать - ты столкнулся с классическим вариантам сбора состава изделия. Как говорят обычно - читай мат.часть.
P.s.: для затравки посмотри как собирается состав в УПП. P.s.2: запросом на языке запросов такую задачу решить проблематично. |
|||
|
31
Sadovnikov
11.03.09
✎
14:52
|
(30) Если бы в восьмерке была бы доступна нормальная работа с временными таблицами и циклами - без проблем бы это решалось. Одним запросом.
|
|||
|
32
DRAGO
11.03.09
✎
14:53
|
А куда в УПП для затравки взглянуть.
Так там вроде сделали какую-то работу с временными таблицами... |
|||
|
33
DRAGO
11.03.09
✎
14:54
|
только циклов нет, конечно
|
|||
|
34
Sadovnikov
11.03.09
✎
14:54
|
(32) Ключевое слово - "какую-то"
|
|||
|
35
DRAGO
11.03.09
✎
14:54
|
только я не пойму для чего они сейчас
|
|||
|
36
Новиков
11.03.09
✎
14:56
|
(31 )Кто ж спорит. Еще учитывать надо термин - "цикличность", или глубину сбора состава. Ведь он может на определенной ветке зациклиться. Кароче - теория гласит так - что нужно ограничение в цикле ставить. Ну это так - к слову.
(32) в упп смотри кусок кода где собирается спецификация изделия, или его состав. Там все тупо, медленно. Но если не сталкивался особо с этим - тогда лучше с этого начать. |
|||
|
37
DRAGO
11.03.09
✎
14:57
|
разузловка?
|
|||
|
38
Новиков
11.03.09
✎
14:58
|
у меня сейчас работающей конфы нет под рукой. Там где состав изделия собирается в виде дерева - ну погляди сам там.
|
|||
|
39
AiR
11.03.09
✎
14:59
|
Ну а кто мешает в 1С описать процедуру с запросом и эту процедуру вызывать рекурсивно?
|
|||
|
40
Новиков
11.03.09
✎
15:00
|
человек запрос хотел написать. Чувствуешь разницу? :)
|
|||
|
41
DRAGO
11.03.09
✎
15:01
|
Это крайний случай, к которому склоняет 1С.
|
|||
|
42
Sadovnikov
11.03.09
✎
15:01
|
(41) А у тебя здесь других вариантов и не остается...
|
|||
|
43
Новиков
11.03.09
✎
15:05
|
Вообщем - есть над чем подумать :)
Но то что в языке запросов 8.1. рекурсии нет - это очень хорошо :) |
|||
|
44
DRAGO
11.03.09
✎
15:06
|
Что же хорошего? Наоборот оставили для себя поле развития.
|
|||
|
45
mista2009
11.03.09
✎
15:11
|
А что с помощью SQL запросов можно вытянуть такую инфу?
Имеется примитивная тиблица, как с помощью одного запроса вытянуть иерархию? produkt zatrata kolichestvo А B 43 A C 34 D A 23 D E 69 Шоб короче были запросы prod, zatr, kol А что в результате мы должны получить? D |___E |___A |__B |__C Иерархию в классическом SQL мы никогда не получим, а то что в 1С иерархия какая-то есть, так это тут не подходит. Все исходные данные для построения результируещего дерева имеются в табличке выше. Объясните мне дураку что вы тут вообще обсуждаете!!! |
|||
|
46
Sadovnikov
11.03.09
✎
15:14
|
(45) "Иерархию в классическом SQL мы никогда не получим" - любуйся:
Set NoCount On Declare @ТекстЗапроса NvarChar(4000), @Столбцы1 NvarChar(4000), @ИдРодителя Char(9), @Уровень Int, @i Int Declare @ДатаМинусМесяц Char(8), @НачТекМесяца Char(8), @КонДатаПлюс1 Char(8), @ИмяРодителя varChar(100) Declare @Столбцы2 NvarChar(50), @Столбцы3 NvarChar(50), @Столбцы4 NvarChar(50),@Стр VarChar(2) Set @ДатаМинусМесяц = '20060101' Set @НачТекМесяца = '20060201' Set @КонДатаПлюс1 = '20060211' Set @ИдРодителя = ' DJF ' Set @ИмяРодителя = '01Трубопроводная арматура' Set @Уровень = 1 Select 0 Уровень, @ИдРодителя ТекИД, Cast(@ИмяРодителя As VarChar(100)) Наименование, Cast(@ИдРодителя As VarChar(200)) СуммаИД , Cast(@ИдРодителя As VarChar(2000)) ПолныйПуть, @ИдРодителя Ид0 Into #ВремТаб Create Index Индекс2 On #ВремТаб (ТекИД) While 1=1 Begin Set @ТекстЗапроса = ' Alter Table #ВремТаб Add Ид'+Cast(@Уровень As VarChar(2))+' char(9) ' exec sp_executesql @ТекстЗапроса Set @Столбцы1 = '' Set @i = 0 While @i < @Уровень Begin Set @Столбцы1 = @Столбцы1 + ',Ид'+Cast(@i As VarChar(2))+ ' Ид'+Cast(@i As VarChar(2)) Set @i = @i + 1 End Set @Столбцы1 = @Столбцы1 + ',ID Ид'+Cast(@Уровень As VarChar(2)) Set @ТекстЗапроса = ' Insert Into #ВремТаб Select @Уровень Уровень, ID ТекИД, Descr Наименование, СуммаИД+ID СуммаИД, ПолныйПуть+''1''+RTrim(Descr)+ID ПолныйПуть'+@Столбцы1+' From SC38 (NoLock) Inner Join #ВремТаб (NoLock) On Ид'+Cast(@Уровень-1 As VarChar(2))+' = ParentID Where Уровень = @Уровень - 1 And IsFolder = 1' exec sp_executesql @ТекстЗапроса, N'@Уровень Int', @Уровень If @@RowCount = 0 Begin Break End Set @Уровень = @Уровень + 1 End Select Товар, Склад, Sum(Количество) ОстатокТовара Into #Остатки From ( --ОстаткиОстатки Select SP222 Товар, SP221 Склад, SP223 Количество From RG220 (NoLock) Where Period = @ДатаМинусМесяц Union All Select SP222 Товар, SP221 Склад , (Case DebKred When 0 Then SP223 Else -SP223 End) Количество From RA220 (NoLock) Where Date_Time_IDDOC >= @НачТекМесяца And Date_Time_IDDOC < @КонДатаПлюс1 ) ОстаткиОстатки Group By Товар, Склад Having Sum(Количество) <> 0 Create Index Индекс2 On #Остатки (Товар) Select * Into #ОстаткиСПутями From ( Select (Уровень + 1) Уровень, ID ТекИД, (ПолныйПуть+'2'+RTrim(Descr)+ID) ПолныйПутьОстатков, Descr Наименование, СуммаИД --(Ид0+Ид1+Ид2) СуммаИД From #ВремТаб (NoLock) Inner Join SC38 (NoLock) On ТекИд = ParentId And IsFolder = 2 ) СПутями Inner Join #Остатки (NoLock) On ТекИД = Товар Select Уровень, ТекИД, Наименование, ЭтоГруппа, Склад, ОстатокТовара, КоличествоВРезерве, Цена From ( Select Distinct ВТ.Уровень Уровень, ВТ.ТекИД ТекИД, ВТ.Наименование Наименование, ВТ.ПолныйПуть ПолныйПуть, 1 ЭтоГруппа , '' Склад, 0 ОстатокТовара, 0 КоличествоВРезерве, 0 Цена From #ВремТаб ВТ (NoLock) Inner Join #ОстаткиСПутями ОСП On ВТ.ТекИД = Substring(ОСП.СуммаИД, ВТ.Уровень*9+1,9) Union All Select Уровень, ТекИД, Наименование, ПолныйПутьОстатков ПолныйПуть, 2 ЭтоГруппа, Склад, ОстатокТовара , IsNull(КоличествоВРезерве,0) КоличествоВРезерве, IsNull(Цена,0) Цена From #ОстаткиСПутями (NoLock) Left Join ( Select Товар ТоварВРезерве, Sum(Количество) КоличествоВРезерве From ( --ОстаткиРезервы Select SP1280 Товар, SP1281 Количество From RG1282 (NoLock) Where Period = @ДатаМинусМесяц Union All Select SP1280 Товар , (Case DebKred When 0 Then SP1281 Else -SP1281 End) Количество From RA1282 (NoLock) Where Date_Time_IDDOC >= @НачТекМесяца And Date_Time_IDDOC < @КонДатаПлюс1 ) ОстаткиРезервы Group By Товар ) Резервы On ТекИд = ТоварВРезерве Left Join ( Select OBJID ИдТовараП, Cast(Value As Numeric(10,2)) Цена From _1SCONST (NoLock) Inner Join ( Select OBJID ИдОбъекта, Max(Date) Дата From _1SCONST (NoLock) Where ID = 79 And Date < @КонДатаПлюс1 Group By OBJID ) Даты On OBJID = ИдОбъекта And Date = Дата And ID = 79 ) Цены On ТекИд = ИдТовараП ) Выборка Order By ПолныйПуть, Склад Drop Table #ВремТаб Drop Table #Остатки Drop Table #ОстаткиСПутями |
|||
|
47
mista2009
11.03.09
✎
15:16
|
(46) Зри в корень!!! А что у тебя в результате этой всей колбасни то получилось?
|
|||
|
48
Sadovnikov
11.03.09
✎
15:17
|
(47) Иерархия " в классическом SQL"
|
|||
|
49
mista2009
11.03.09
✎
15:21
|
(48) Как бы тебе объяснить то...
Начнём с того что мы говорим про чистые запросы без временных таблиц, курсоров, циклов, переменных и прочей лабуды. Ты сможешь с помощью запросов получить иерархию? |
|||
|
50
mista2009
11.03.09
✎
15:22
|
Вот КОНКРЕТНЫЙ очень маленький примерчие. Хачу шоб была иерархия. Выдай мне запрос.
produkt zatrata kolichestvo А B 43 A C 34 D A 23 D E 69 |
|||
|
51
Новиков
11.03.09
✎
15:22
|
(46) Лишний раз посмотреть и убедиться - хорошо что в языке запросов 8.1. нет рекурсии :))))
|
|||
|
52
Sadovnikov
11.03.09
✎
15:23
|
(49) А с какого перепуга я буду на себя такие ограничения накладывать? Типа "А стобо сделать то-то и то-то только с использованием методов, описанных с 30 по 122 страницу мануала?". Что за бред-то?
|
|||
|
53
mista2009
11.03.09
✎
15:23
|
(51) Ещё один... Посмотри (45) очень внимательно. Если бы была рекурсия по мановению волшебной палочки что бы ты получил в результате её?
|
|||
|
54
rs_trade
11.03.09
✎
15:23
|
(50) Почитай книгу "Профессиональное руководство по Transact-SQL. Для профессионалов.2005" Автор Кен Хендерсон. Там есть несколько примеров иерархии
|
|||
|
55
mista2009
11.03.09
✎
15:25
|
(54) Ещё один... ЧТО БУДЕТ В КОНЕЧНОМ РЕЗУЛЬТАТЕ????
produkt zatrata kolichestvo А B 43 A C 34 D A 23 D E 69 Вам не кажется что будет точно такая же табличка???? |
|||
|
56
Sadovnikov
11.03.09
✎
15:26
|
(54) Бесполезно давать такие советы человеку, создающему подобные ветки:
v8: Как обманчивы Null-ы |
|||
|
57
Sadovnikov
11.03.09
✎
15:26
|
(55) "Вам не кажется что будет точно такая же табличка????" - НЕ будет. Тебе ни разу не приходилось средствами скуля таблицы вправо разворачивать?
|
|||
|
58
mista2009
11.03.09
✎
15:30
|
(57) Ещё раз... Вот конкретный пример
produkt zatrata kolichestvo А B 43 A C 34 D A 23 D E 69 Я вижу что некто садовников очень хорошо разбирается в SQL. Выдайте мне запрос на SQL для этих данных. Зачем мне колбасня в (46). Такую колбасню уже тупые адынэсники в УПП используют для построения дерева спецификации. SQL намного круче 1С, соотв. можно сделать всё что угодно. Вперёд Садовников!!! |
|||
|
59
Sadovnikov
11.03.09
✎
15:30
|
(58) Поверь, я уже давным-давно на слабо не ведусь.
|
|||
|
60
mista2009
11.03.09
✎
15:33
|
Ау!!!! Мне ктонить создасть этот маленький запросик на SQL???
produkt zatrata kolichestvo А B 43 A C 34 D A 23 D E 69 |
|||
|
61
Sadovnikov
11.03.09
✎
15:34
|
(60) Сколько платишь?
|
|||
|
62
Новиков
11.03.09
✎
15:36
|
(60) деревом в виде xml файла с нужными группировками и итогами. Но не за спасибо :) На одном T-SQL :)
|
|||
|
63
mista2009
11.03.09
✎
15:39
|
Садовников и Новиков давайте без обид и т.д. Я не сомневаюсь в вашем профессионализме. Я для себя хочу понять.
С помощью только одних запросов SQL вытягиваются только двумерные таблицы? Типа: produkt zatrata kolichestvo А B 43 A C 34 D A 23 D E 69 |
|||
|
64
Sadovnikov
11.03.09
✎
15:40
|
(63) "только двумерные таблицы?" - разумеется. Вот, только они могут быть очень разными. Например, растянутыми вправо :)
|
|||
|
65
mista2009
11.03.09
✎
15:41
|
(64) Ну хорошо. Ну нарисуй мне результирующую табличку для моих данных
produkt zatrata kolichestvo А B 43 A C 34 D A 23 D E 69 |
|||
|
66
mista2009
11.03.09
✎
15:52
|
Или это тоже платно :)
|
|||
|
67
Sadovnikov
11.03.09
✎
15:52
|
(65) Слушай, без обид - а оно мне надо?
|
|||
|
68
Новиков
11.03.09
✎
15:52
|
в графе количество должны стоять - посчитанные количества правильно. Затем это можно вылить в xml - и получишь 1С-ное ДЗ, которое останется только влить к себе.
|
|||
|
69
mista2009
11.03.09
✎
15:54
|
(68) Чего, чего? Все количества у меня подсчитаны правильно.
Мы щас не говорим об XML и 1С. Мы говорим о классическом SQL. |
|||
|
70
AiR
11.03.09
✎
15:56
|
||||
|
71
mista2009
11.03.09
✎
15:58
|
(70) Ну вот наконецто появился специалист AiR который мне щас забацает согласно статье http://www.sqlbooks.ru/readarticle.aspx?part=02&file=sql200509 запрос по моим данным и покажет результат запроса.
|
|||
|
72
wHammer
11.03.09
✎
16:00
|
mista2009 похоже ты всех уделал
|
|||
|
73
Новиков
11.03.09
✎
16:09
|
мда. Если все количества правильно подсчитаны - о чем тогда тут речь ведется? Ты посмотри выше - чего человеку надобно было изначально. Раскрутить вниз дерево до листа и посчитать верх количества по корням. Чтобы это сделать - надо для начала такое дерево собрать. Садовников тебе говорил про разворот в право - это когда плоская твоя табличка будет дополнятся необходимыми полями вправо. В собранно виде - его останется только вывести (куда-то). Если ты считаешь что у тебя все количества в твоем примере посчитаны правильно - значит имеет место быть говорить о каком-то ином понимании того, чего нужно :)
|
|||
|
74
mista2009
11.03.09
✎
16:13
|
Уважаемый Новиков я не соблаговолите ли вы мне нарисовать эту результирующую табличку для моих данных. Я бы был вам очень благодарен.
produkt zatrata kolichestvo А B 43 A C 34 D A 23 D E 69 |
|||
|
75
AiR
11.03.09
✎
16:16
|
(71) Я показал пример реализации, в чем у тебя проблема? Есть же Копи-паст в конце концов.
|
|||
|
76
mista2009
11.03.09
✎
16:17
|
Ну вот Садовникову и Новикову наверно лень нарисовать результирующую табличку для моих данных. Нарисуй мне пожалуйста.
produkt zatrata kolichestvo А B 43 A C 34 D A 23 D E 69 |
|||
|
77
vvf1973
11.03.09
✎
16:20
|
(77) Вам никто ничего не должен.
|
|||
|
78
mista2009
11.03.09
✎
16:24
|
Я чё пытаюсь понять то. Вот тупая 1С и тупые разработчкие УПП не могут нормально и быстро развернуть иерархию. А в SQL это всё делается влёт одним запросом и очень шустро. Ну вот ну покажите мне как это делается без вот этой вот колбасни (46) наподобии построения спецификации в УПП.
|
|||
|
79
rs_trade
11.03.09
✎
16:26
|
(78) Ну так иди в разработчики 1С, и покажи им всем тупым как надо...
|
|||
|
80
Новиков
11.03.09
✎
16:28
|
(78) ты разницу понимаешь между языком запросов 8.1. и языком "колбасни". В колбасне резалт получится для вывода.
(79) Причем тут тупость? дело в универсальности (якобы). Я думаю, если бы упп была исключительно в скуль-версии, скорее всего заточка была бы сделана на рекурсионный сбор состава. А т.к. язык-запросов не позволяет сего, посему или так - или сами собирайте. |
|||
|
81
mista2009
11.03.09
✎
16:31
|
"заточка была бы сделана на рекурсионный сбор состава"
Ну вас умоляю, ну покажите мне запрос, ну покажите мне хотябы результат запрос для моих данных, ну пожалуйста :)))))) produkt zatrata kolichestvo А B 43 A C 34 D A 23 D E 69 |
|||
|
82
rs_trade
11.03.09
✎
16:38
|
(81) Судя по посту (49) для тебя чистый SQL это select * from Table1. А прочая лабуда - временные таблицы, курсоры, циклы, переменные это все приблуды сторонние...
|
|||
|
83
mista2009
11.03.09
✎
16:38
|
(79) Я только для начала прочитаю книжечку из (54) послушаю Садовникова с Новиковым и пойду :)
|
|||
|
84
Новиков
11.03.09
✎
16:45
|
ты калькулятором пользоваться умеешь? Дерево уже нарисовал. Осталось количество по дереву подсчитать и нарисовать :) Итоговая табличка будет плоской - но дополненой справа или слева - кто как определит - дополнительными полями. Это первый вариант. Второй - собрать запросом дерево в xml и распарсить его в 1С (с 2005). Тоже пишется "классическим" T-SQL. Во втором варианте будет реальное дерево, которое ты будешь смотреть соотв. вьювером и видеть никакие таблички плоские - а дерево, с листикам корешками :)
Предвкушаю след.вопрос - что будет в доп.полях? Или опять про табличку? :)) |
|||
|
85
wHammer
11.03.09
✎
16:48
|
Да, смешно получилось, люди неправы оказались, а сознаться им в этом что-то очень сильно мешает :)
|
|||
|
86
Новиков
11.03.09
✎
16:49
|
(85) ну ткни пальчиком где не правы то? :)
|
|||
|
87
bahmet
11.03.09
✎
16:52
|
(81)
AD BCAE 169 только успокойся :)) |
|||
|
88
mista2009
11.03.09
✎
16:56
|
(84) А что вы боитесь рисовать таблички и деревья. Они же маленькие. Быстро рисуются. Посмотрите сколько я нарисовал. Так же понятнее. А то вот ты чё-то ляпнул, а конкретики никакой.
|
|||
|
89
Новиков
11.03.09
✎
16:57
|
(88) ты топиться пойдешь - нам за тобой бежать бегом? :)
|
|||
|
90
wHammer
11.03.09
✎
17:03
|
(86) Нет рекурсии ни в запросах 1С 8.х ни в классическом SQL, а вы пытаетесь доказать обратное, причем как-то уж совсем нелепо, вроде "А оно мне надо - я сказал я прав, значит прав, и доказывать свою правоту не буду, т.к. давно уже на слабо не ведусь" :) Вот в этом и не правы.
|
|||
|
91
fisher
11.03.09
✎
17:04
|
Камень преткновения этой ветки - различия в трактовке термина "язык запросов".
В результате каждый прав по своему и флейм обеспечен :) |
|||
|
92
fisher
11.03.09
✎
17:08
|
(90) Ты не совсем прав. Язык запросов к СЕРВЕРУ баз данных отнюдь не ограничивается оператором SELECT. Тебе хватит беглого просмотра (46) даже без знания предмета, чтобы понять о чем речь.
|
|||
|
93
rs_trade
11.03.09
✎
17:08
|
(90) С рекурсии давно уже перешли на иерархию...В посте (45) утверждается что средствами SQL нельзя получать иерархию...Все системы построенные на SQL как то обходятся без нее, либо используют извраты, то как временные таблицы, курсоры, циклы, переменные
|
|||
|
94
Новиков
11.03.09
✎
17:09
|
(90) Про язык запросов 8.1. - я ничего против не имею и не высказывался за то что рекурсия там есть. В T-SQL рекурсия организована может быть посредством языка собсна. Как доказать? Порятнки выкладывать сбора состава рекурсивного? Посмотрите тут уже выкладывались они. Или схему преобразования дерева в xml показать? Тоже зрелище не для слабонервных. Я не понимаю - в чем собственно не правы то?
|
|||
|
95
wHammer
11.03.09
✎
17:09
|
(92) Ну так речь о классическом SQL, а не о возможностях той или иной СУБД.
|
|||
|
96
mista2009
11.03.09
✎
17:11
|
И T-SQL далеко не классический SQL
|
|||
|
97
fisher
11.03.09
✎
17:12
|
(95) Это ты так решил. Другие решили по-другому :) Я же сказал, что в этой теме забыли определиться с терминами.
|
|||
|
98
mista2009
11.03.09
✎
17:15
|
(93) А (45) перечитай всётаки, там "Иерархию в классическом SQL мы никогда не получим..."
|
|||
|
99
Новиков
11.03.09
✎
17:19
|
жесть. родите меня обратно.
Утверждаю что в T-SQL используемый в MS SQL 2005 и выше можно реализовать рекурсию. Можно кубы олапные городить. Можно запросы даже к екселю писать. Все на скуле. А человек в (0) спрашивал - как средствами языка 8.1. сделать то что он хочет. ответ - средствами только языка запросов - никак. Если писать T-SQL - то можно только запросом получить нужный результат. усе. |
|||
|
100
kiruha
11.03.09
✎
17:21
|
(56)"Бесполезно давать такие советы человеку, создающему подобные ветки:"
v8: Как обманчивы Null-ы Зря в той ветке закритиковали человека. Проблема действительно есть, она связана с тем, что в SQL применяется 3-значная логика, в математике , как правило 2-х значная. Соответственно некоторые интуитивно-понятные запросы могут иметь неожиданный результат. Выход на сравнение Null<> Null - может появиться как результат соединения 2 таблиц, а не только как вычурное выражение. Проблему эту поднимал например Дейт, см. NULL, трехзначная логика и неопределенность в SQL: критика критики Дейта http://www.citforum.ru/database/articles/nulls/ |
|||
|
101
rs_trade
11.03.09
✎
17:45
|
(98) что ты понимаешь под термином "классический SQL"? SQL-86 или может быть SEQUEL?
|
|||
|
102
Serg_1960
11.03.09
✎
17:48
|
Рецензия:
Прочел всё с удовольствием. Классика жанра. Спор, в котором погибает истина. Но kiruha круто перевёл стрелки и из безполезной перепалки родилась истина. Неожиданная развязка. Я в восторге. PS: пойду почитаю ещё что нибудь "от mista2009" |
|||
|
103
mista2009
11.03.09
✎
17:48
|
Ну незнаю я что такое классический. Ну это просто не T-SQL.
|
|||
|
104
fisher
11.03.09
✎
18:15
|
Кстати, да. ANSI-SQL начиная с редакции SQL3 1999 года включает рекурсивные (иерархические) запросы (реализованные в Oracle 8, MS SQL 2005, DB2 и вообще всех СУБД соответствующих стандарту SQL 1999), регулярные выражения, процедурные расширения и т.п.
А я и в самом деле не знал про рекурсивные запросы... <побежал просвящаться> ЗЫ. А в SQL 2008, оказывается, еще и hierarchyid придумали... Очень надеюсь, что разработчики 1С будут идти в ногу со временем и реализуют все эти вкусности. |
|||
|
105
Humandra
12.03.09
✎
05:28
|
Есть в SQL иерархические запросы, что бы вы не говорили.
В том же Oracle запрос на чистом SQL, возвращающий иерархию будет выглядеть как: select id , idParent , Parametrs from Table connect by prior id = idPrnt start with idPrnt is null Из таблицы id idPrnt Parametrs 2 1 33 1 null 45 4 3 89 3 1 67 получим таблицу: id idPrnt Parametrs 1 null 45 2 1 33 3 1 67 4 3 89 И задачи типа задач о списании затрат решаются одним запросом, правда, не таким простым, чуть посложнее... |
|||
|
106
mista2009
12.03.09
✎
07:17
|
(105) Да замечательно что есть такие запросы. А вам не кажется что в результате просто получилась отсортированная таблица. Или это какая-то хитрая таблица?
|
|||
|
107
Corban
01.04.09
✎
11:06
|
Иерархию на обычном SQL еще можно построить с помощью рекурсивного запроса
И делается это с "пол пинка" :) Вот тебе пример: ALL |--SEA | |--SUBMARINE | |--BOAT |--EARTH | |--CAR | |--TWO WHEELES | | |--MOTORCYCLE | | |--BYCYCLE | |--TRUCK |--AIR |--ROCKET |--PLANE ----------------------------------------------- IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = USER AND TABLE_NAME = 'T_VEHICULE') DROP TABLE T_VEHICULE -- Создать таблицу CREATE TABLE T_VEHICULE (VHC_ID INTEGER NOT NULL PRIMARY KEY, VHC_ID_FATHER INTEGER FOREIGN KEY REFERENCES T_VEHICULE (VHC_ID), VHC_NAME VARCHAR(16)) -- Наполнить данными INSERT INTO T_VEHICULE VALUES (1, NULL, 'ALL') INSERT INTO T_VEHICULE VALUES (2, 1, 'SEA') INSERT INTO T_VEHICULE VALUES (3, 1, 'EARTH') INSERT INTO T_VEHICULE VALUES (4, 1, 'AIR') INSERT INTO T_VEHICULE VALUES (5, 2, 'SUBMARINE') INSERT INTO T_VEHICULE VALUES (6, 2, 'BOAT') INSERT INTO T_VEHICULE VALUES (7, 3, 'CAR') INSERT INTO T_VEHICULE VALUES (8, 3, 'TWO WHEELES') INSERT INTO T_VEHICULE VALUES (9, 3, 'TRUCK') INSERT INTO T_VEHICULE VALUES (10, 4, 'ROCKET') INSERT INTO T_VEHICULE VALUES (11, 4, 'PLANE') INSERT INTO T_VEHICULE VALUES (12, 8, 'MOTORCYCLE') INSERT INTO T_VEHICULE VALUES (13, 8, 'BYCYCLE') ------------------------------------------------ --Теперь ищем к примеру откуда пришел товар (к примеру'MOTORCYCLE') WITH tree (data, id) AS (SELECT VHC_NAME, VHC_ID_FATHER FROM T_VEHICULE WHERE VHC_NAME = 'MOTORCYCLE' UNION ALL SELECT VHC_NAME, VHC_ID_FATHER FROM T_VEHICULE V INNER JOIN tree t ON t.id = V.VHC_ID) SELECT * FROM tree ------------------------------------- --Результат: --data id ---------------- ----------- --MOTORCYCLE 8 --TWO WHEELES 3 --EARTH 1 --ALL NULL |
|||
|
108
mista2009
01.04.09
✎
12:07
|
Вроде умные люди, такие сложные запросы строят...
"Иерархию на обычном SQL еще можно построить с помощью рекурсивного запроса" Я вижу что иерархию ты постоил в блокнотике!!! А с помощью рекурсии ты только нашёл откуда пришёл товар!!! :))) А чтобы на самом деле построить иерархию визуально в какойнить формечке тебе никакие круты рекурсивные запросы не помогут. Только обычные селекты. |
|||
|
109
Corban
01.04.09
✎
12:27
|
" А с помощью рекурсии ты только нашёл откуда пришёл товар!!! :))) ""
- так вот это самое главное и основное..а как расположить эти колонки на экране это уже дело второе.. и тут на вкус и цвет.. Думаю не надо показывать, как пользоваться кейсами:) |
|||
|
110
mista2009
01.04.09
✎
12:39
|
(109) Пипец.. Ты чё иерархию с листьев строишь??? Наверно с корня и до листьев всё таки? И на кой тут твои крутые запросы?
|
|||
|
111
Corban
01.04.09
✎
12:56
|
По-моему мы говорим на разных языках..
Какая разница с чего начинает обход запрос , я не пойму.. По-моему главное результат, или я не прав.. Если ты считаешь, что результат не верный, то это наверное потому, что кто-то неправильно поставил задачу, или сам не понимает что хочет) Нарисуй, что ты хочешь видеть в конечно итоге! |
|||
|
112
Corban
01.04.09
✎
12:59
|
"Наверно с корня и до листьев всё таки?" - кстати он как раз так и работает..
В данном случае пока не уперся в Null |
|||
|
113
mista2009
01.04.09
✎
13:07
|
(111)
Ты же вроде сам нарисовал дерево и сказал что я его с пол пинка построю с помощью рекурсивного запроса :))) И непонятно к чему привёл запрос для получения всех родителей у листа. Как будто с помощью этого запроса можно строить деревья. Как запрос получающий всех родителей поможет построить дерево. Вроде наоборот надо. Находим корень. У корня нет родителя. С помощью тупого селекта выбираем все элементы у которых родителем является корень. И т.д. Объясните мне тупому конфигурасту зачем как мне поможет рекурсия???????? ALL |--SEA | |--SUBMARINE | |--BOAT |--EARTH | |--CAR | |--TWO WHEELES | | |--MOTORCYCLE | | |--BYCYCLE | |--TRUCK |--AIR |--ROCKET |--PLANE |
|||
|
114
Corban
01.04.09
✎
13:08
|
такой вариант тебя устроит?
----------------------------------------- WITH tree (data, id, level, pathstr) AS (SELECT VHC_NAME, VHC_ID, 0, CAST('' AS VARCHAR(MAX)) FROM T_VEHICULE WHERE VHC_ID_FATHER IS NULL UNION ALL SELECT VHC_NAME, VHC_ID, t.level + 1, t.pathstr + V.VHC_NAME FROM T_VEHICULE V INNER JOIN tree t ON t.id = V.VHC_ID_FATHER) SELECT SPACE(level) + data as data, id, level, pathstr FROM tree ORDER BY pathstr, id ------------------------------------------ вставь его вместо -------------------------------------- WITH tree (data, id) AS (SELECT VHC_NAME, VHC_ID_FATHER FROM T_VEHICULE WHERE VHC_NAME = 'MOTORCYCLE' UNION ALL SELECT VHC_NAME, VHC_ID_FATHER FROM T_VEHICULE V INNER JOIN tree t ON t.id = V.VHC_ID) SELECT * FROM tree -------------------------------------- |
|||
|
115
Serg_1960
01.04.09
✎
13:12
|
Вы зачем ворошите прошлое? Ветка тихо скончалась сама собой, а Вы опять... труп из могилы... конфигурасты-некрофилы :(
|
|||
|
116
Corban
01.04.09
✎
13:18
|
Ну человек остался не удовлетворен:)..надо же поставить точку в этой дискуссии.
|
|||
|
117
mista2009
01.04.09
✎
13:18
|
Пля хитрый запрос...
В результате этого запроса что будет? WITH tree (data, id, level, pathstr) AS (SELECT VHC_NAME, VHC_ID, 0, CAST('' AS VARCHAR(MAX)) FROM T_VEHICULE WHERE VHC_ID_FATHER IS NULL UNION ALL SELECT VHC_NAME, VHC_ID, t.level + 1, t.pathstr + V.VHC_NAME FROM T_VEHICULE V INNER JOIN tree t ON t.id = V.VHC_ID_FATHER) SELECT SPACE(level) + data as data, id, level, pathstr FROM tree ORDER BY pathstr, id |
|||
|
118
Corban
01.04.09
✎
13:21
|
а что так сложно воткнуть его в аналайзер..ну да ладно..
Вот что будет ------------------------------------------------------- data id level pathstr ALL 1 0 AIR 4 1 AIR PLANE 11 2 AIRPLANE ROCKET 10 2 AIRROCKET EARTH 3 1 EARTH CAR 7 2 EARTHCAR TRUCK 9 2 EARTHTRUCK TWO WHEELES 8 2 EARTHTWO WHEELES BYCYCLE 13 3 EARTHTWO WHEELESBYCYCLE MOTORCYCLE 12 3 EARTHTWO WHEELESMOTORCYCLE SEA 2 1 SEA BOAT 6 2 SEABOAT SUBMARINE 5 2 SEASUBMARINE |
|||
|
119
Corban
01.04.09
✎
13:22
|
только тут все полыло почему-то..но смысл думаю понятен
|
|||
|
120
КВАДРО2
01.04.09
✎
13:23
|
(0) Как два пальца обоссать
|
|||
|
121
Corban
01.04.09
✎
13:24
|
data id level pathstr
ALL 1 0 AIR 4 4 AIR PLANE 11 2 AIRPLANE ROCKET 10 2 AIRROCKET EARTH 3 1 EARTH CAR 7 2 EARTHCAR TRUCK 9 2 EARTHTRUCK TWO WHEELES 8 2 EARTHTWO WHEELES BYCYCLE 13 3 EARTHTWO WHEELESBYCYCLE MOTORCYCLE 12 3 EARTHTWO WHEELESMOTORCYCLE SEA 2 1 SEA BOAT 6 2 SEABOAT SUBMARINE 5 2 SEASUBMARINE |
|||
|
122
Corban
01.04.09
✎
13:24
|
жесть..тупой движок форума..
|
|||
|
123
mista2009
01.04.09
✎
13:24
|
(118) Это обычная двумерная таблица?
|
|||
|
124
Corban
01.04.09
✎
13:25
|
а ты как считаешь? :)
|
|||
|
125
mista2009
01.04.09
✎
13:26
|
Не знаю. Я тебя в (117) и спрашиваю.
|
|||
|
126
Corban
01.04.09
✎
13:29
|
отвечаю -ДА
|
|||
|
127
mista2009
01.04.09
✎
13:36
|
(126) Ну хорошо... Я имею эту таблику. Хочу вывести в дерево на форме.
Мне эта табличка как то поможет? |
|||
|
128
mista2009
01.04.09
✎
13:37
|
Согласись что это просто двумерная таблица упорядоченная определенным образом?
|
|||
|
129
Corban
01.04.09
✎
13:51
|
Послушай, я не знаю твоей задачи, и я не программист 1С
Ты попросил -------------------------------------------- А что в результате мы должны получить? D |___E |___A |__B |__C ---------------------------------------- - а теперь спрашиваешь, как это тебе поможет для построения формы. а дальше ты захочешь чтобы каждое поле в этой форме было активно и ты мог кликом на любое перейти в хз куда.. Если бы ты с самого начала описал подробно твою задачу, то думаю такой длинной дискусси не было. --P.S Умейте правильно задавать вопросы. |
|||
|
130
mista2009
01.04.09
✎
15:50
|
(129) Да нету у меня никакой задачи. Чё толку от твоего запроса крутого если ещё придётся код колбасить для вывода. Я к тому что от рекурсии толку тут никакого.
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |