|
Количество таблиц больше 256 | ☑ | ||
---|---|---|---|---|
0
In-Vin
20.06.12
✎
14:07
|
Есть запрос,
ВЫБРАТЬ | ВерсииОбъектов.Объект КАК Ссылка, | ВерсииОбъектов.ВерсияОбъекта, | ВерсииОбъектов.НомерВерсии КАК НомерВерсии, | ВерсииОбъектов.ДатаВерсии, | ВерсииОбъектов.АвторВерсии |ИЗ | (ВЫБРАТЬ | ВложенныйЗапрос.Объект КАК Объект, | ВложенныйЗапрос.НомерВерсии КАК НомерВерсии | ИЗ | (ВЫБРАТЬ | ВерсииОбъектов.Объект КАК Объект, | СУММА(ВерсииОбъектов.НомерВерсии) КАК НомерВерсии, | ВерсииОбъектов.Объект.Дата КАК ОбъектДата, | ВерсииОбъектов.ДатаВерсии КАК ДатаВерсии | ИЗ | РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг | ПО ВерсииОбъектов.Объект.Ссылка = РеализацияТоваровУслуг.Ссылка | ГДЕ | ВерсииОбъектов.Объект.Дата >= &ДатаСоздания1 | И ВерсииОбъектов.Объект.Дата <= &ДатаСоздания2 | | СГРУППИРОВАТЬ ПО | ВерсииОбъектов.Объект, | ВерсииОбъектов.ДатаВерсии, | ВерсииОбъектов.Объект.Дата) КАК ВложенныйЗапрос | ГДЕ | ВложенныйЗапрос.НомерВерсии > 1) КАК ВложенныйЗапрос | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов | ПО ВложенныйЗапрос.Объект = ВерсииОбъектов.Объект |ГДЕ | ВерсииОбъектов.Объект.Дата >= &ДатаСоздания1 | И ВерсииОбъектов.Объект.Дата <= &ДатаСоздания2 | И ВерсииОбъектов.ДатаВерсии >= &ДатаВерсии1 | |УПОРЯДОЧИТЬ ПО | Ссылка, | НомерВерсии при его выполнении возникает ошибка, часть описания которой выглядит так: Построенный запрос к СУБД использует слишком много таблиц. Допустимо не более 256. Microsoft OLE DB Provider for SQL Server: Слишком много имен таблиц в запросе. Максимально допустимое значение - 256. 8.2.12.92 SQL 2005 |
|||
1
In-Vin
20.06.12
✎
14:09
|
подскажите, в чем причина
|
|||
2
Buster007
20.06.12
✎
14:09
|
ВерсииОбъектов.Объект
вот здесь слишком много таблиц, сделай поменьше ) |
|||
3
Рэйв
20.06.12
✎
14:09
|
Не соединяй с Субконто и составными типами.
|
|||
4
Ёпрст
20.06.12
✎
14:09
|
составной тип.. чего там не ясного ?
|
|||
5
zak555
20.06.12
✎
14:10
|
что нужно получить ?
|
|||
6
Stepa86
20.06.12
✎
14:10
|
Раз из всех типов тебе нужен тока РеализацияТоваровУслуг, то замени обращение к ВерсииОбъектов.Объект на (Выразить ВерсииОбъектов.Объект КАК Документ.РеализацияТоваровУслуг)
|
|||
7
Maxus43
20.06.12
✎
14:10
|
Выразить(ВерсииОбъектов.Объект КАК Документ.РеализацияТоваровУслуг)
|
|||
8
zak555
20.06.12
✎
14:11
|
и зачем столько вложенных ?
|
|||
9
Stepa86
20.06.12
✎
14:12
|
(8)+100
|
|||
10
Buster007
20.06.12
✎
14:13
|
а запрос, кстати, вообще жестокий )
|
|||
11
Stepa86
20.06.12
✎
14:13
|
Вроде б без вложенных можно обойтись и
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг | ПО ВерсииОбъектов.Объект.Ссылка = РеализацияТоваровУслуг.Ссылка заменить на Версии.Объект Ссылка Документ.РеализацияТоваровУслуг |
|||
12
Stepa86
20.06.12
✎
14:14
|
как вариант: поставить 2008 скуль, там нет ошибки с 256 таблицами
|
|||
13
Maxus43
20.06.12
✎
14:14
|
(12) не вариант, зачем насиловать скуль? надо запросы писать по феншую
|
|||
14
Stepa86
20.06.12
✎
14:16
|
(13) извини, что смайлик забыл
|
|||
15
unregistered
20.06.12
✎
14:18
|
(0) Это убрать из запроса совсем: ВерсииОбъектов.Объект.Дата КАК ОбъектДата
Ты это поле во вложенном запросе не используешь. И группировка по нему бессмысленна. ВерсииОбъектов.Объект КАК Объект замени на ВЫРАЗИТЬ(ВерсииОбъектов.Объект КАК Документ.реализациоТоваровУслуг) КАК Объект Это соединение нафиг не надо: ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг ПО ВерсииОбъектов.Объект.Ссылка = РеализацияТоваровУслуг.Ссылка Замени тупо на условие: ГДЕ ВерсииОбъектов.Объект ССЫЛКА Документ.РеализацияТоваровУслуг И вообще запрос какой-то стрёмный. Не понял нафига тут вложенность. |
|||
16
Maxus43
20.06.12
✎
14:19
|
(14) лучше табличку "сарказм" показывать)
|
|||
17
In-Vin
20.06.12
✎
14:21
|
так много вложенных запросов из-за того, что агрегаты глючат, помогло соединение с таблицей РеализацияТоваровИУслуг. Всем спасибо!
|
|||
18
DEVIce
20.06.12
✎
14:22
|
Вот такое ВерсииОбъектов.Объект.Ссылка - это очень плохо. Это раз. Ну и как выше писали - используй ВЫРАЗИТЬ.
|
|||
19
DEVIce
20.06.12
✎
14:23
|
(11). Нельзя так Степан менять потому что в его случае завяка идет на конкретный документ, а ты предлагаешь завязаться на все документы конкретного типа. Разницу чуешь?
|
|||
20
anddro
20.06.12
✎
14:25
|
(18) ВЫРАЗИТЬ тоже надо использовать с умом. Использование ВЫРАЗИТЬ в условии - это гораздо хуже, чем использование ССЫЛКА.
|
|||
21
Stepa86
20.06.12
✎
14:41
|
(20) Почему? Выразить не дает скулю соединятся с лишними таблицами, Ссылка получает тип - это как бэ не взаимозаменяемые вещи. да и что плохого в выразить в условии?
|
|||
22
anddro
20.06.12
✎
14:50
|
(21) посмотри на запрос на стороне sql. Речь именно про ГДЕ ***.
При использовании в условии ССЫЛКА - идет просто отбор по типу значения. А при использовании ВЫРАЗИТЬ - используется CASE для всех записей. |
|||
23
Stepa86
20.06.12
✎
14:54
|
(22) этото понятно, но если нужно условие на Таблица.Объект.Дата , то без Выразить не обойтись, без него будет тот же case тока по всем возможным таблицам
|
|||
24
anddro
20.06.12
✎
15:01
|
(23) Если нужно условие на Таблица.Объект.Дата (естественно только по одному виду объектов), то лучше и достаточно:
Таблица.Объект ССЫЛКА *ТИП ССЫЛКИ* И Таблица.Объект.Дата = &Значение. ВЫРАЗИТЬ в таком случае не нужно. |
|||
25
Stepa86
20.06.12
✎
15:04
|
(24) Выразить( Таблица.Объект КАК Документ.Документ ).Дата = &Значение разве не в то же самое превратится в скуле?
|
|||
26
anddro
20.06.12
✎
15:07
|
(25) нет, не превратится, оно превратится в "ужасный" CASE, можешь проверить. Я проверял на 8.1.15, но вдруг что-то в этом мире изменилось и я уже не прав.
|
|||
27
acsent
20.06.12
✎
15:09
|
косяк здесь: Таблица.Объект.Дата
если соединяешь с таблицей документов то и значения полей оттуда бери |
|||
28
Stepa86
20.06.12
✎
15:11
|
(26) с чего ужасный то? должно быть что то вроде
case when нечитаемыйИД Ссылка ДругойНечитаемыйИД then нечитаемыйИД.date end = &Значение но проверять лезть нет желания |
|||
29
anddro
20.06.12
✎
15:18
|
(28) с того, что:
1. индексы, впрочем если их нет... 2. case будет выполнен для всех записей в выборке и мне тоже лень)) |
|||
30
Stepa86
20.06.12
✎
15:27
|
(29) 1. индексы добавят нечитабельности, но производительность попортить не должны
2. "Таблица.Объект ССЫЛКА *ТИП ССЫЛКИ* И Таблица.Объект.Дата = &Значение" тож перебором будет выполняться, ну во всяком случае это тот же case, где проверяется тип и если он нужный, то проверяется дата. И есть бооольшой подозрение, что вторая часть этого условия опять же развернется в охеренный case без ограничений по таблицам |
|||
31
sapphire
20.06.12
✎
15:37
|
(0)
|ВЫБРАТЬ | ВерсииОбъектов.Объект КАК Ссылка, | ВерсииОбъектов.ВерсияОбъекта, | ВерсииОбъектов.НомерВерсии КАК НомерВерсии, | ВерсииОбъектов.ДатаВерсии, | ВерсииОбъектов.АвторВерсии |ИЗ | РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов |ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг |ПО ВерсииОбъектов.Объект = РеализацияТоваровУслуг.Ссылка |ГДЕ ВерсииОбъектов.Объект.Дата >= &ДатаСоздания1 | И РеализацияТоваровУслуг.Дата >= &ДатаСоздания1 | И РеализацияТоваровУслуг.Дата <= &ДатаСоздания2 |
|||
32
sapphire
20.06.12
✎
15:40
|
(31)вернет тот же набор данных, что и (0)
Очепятка тама: |ВЫБРАТЬ | ВерсииОбъектов.Объект КАК Ссылка, | ВерсииОбъектов.ВерсияОбъекта, | ВерсииОбъектов.НомерВерсии КАК НомерВерсии, | ВерсииОбъектов.ДатаВерсии, | ВерсииОбъектов.АвторВерсии |ИЗ | РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов |ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг |ПО ВерсииОбъектов.Объект = РеализацияТоваровУслуг.Ссылка |ГДЕ | РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаСоздания1 И &ДатаСоздания2 | И ВерсииОбъектов.ДатаВерсии >= &ДатаВерсии1 | И ВерсииОбъектов.НомерВерсии>1 |
|||
33
anddro
20.06.12
✎
16:01
|
(30) Победил лень, проверил, и увидел, что был не прав. "Внезапно"
ВЫРАЗИТЬ - дает условие по таблице документа + left join таблицы регистра с таблицей документа. Похожий запрос в (32), но там inner join. а вот ССЫЛКА + условие на реквизит документа как раз наоборот - дало join со всеми таблицами (где есть такой реквизит) и условие через case по каждому виду документов, т.е. условие ССЫЛКА + реквизит здесь оказалось значительно хуже. >> И есть бооольшой подозрение ... оно подтвердилось |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |