|
Пятничное: сложное соединение по строкам в запросе. | ☑ | ||
---|---|---|---|---|
0
catena
13.04.12
✎
19:49
|
Есть запрос, который спокойно выполняется на файловом варианте и стабильно вылетает на серверном. Просто интересно: есть возможность оптимизировать?
Запрос = Новый Запрос; Запросы = " |ВЫБРАТЬ | "_" КАК Симв, | 1 КАК КолСимв |ПОМЕСТИТЬ тзКоличествоСимволов9 | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | "__", | 2 | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | "___", | 3 | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | "____", | 4 | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | "_____", | 5 | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | "______", | 6 | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | "_______", | 7 | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | "________", | 8 | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | "_________", | 9 | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | "__________", | 10 | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | "", | 0 |; | |//////////////////////////////////////////////////////////////////////////////// |Выбрать |тз1.ВнутреннийНомер |поместить тз1 из &тз1 как тз1 |; |Выбрать |тз2.ВнутреннийНомер |поместить тз2 из &тз2 как тз2 |; |Выбрать |тз1сРазбиением.ВнутреннийНомер, |Подстрока(тз1сРазбиением.ВнутреннийНомер,1, КоличествоСимволовДоТире.КолСимв) как ДоСлэша, |Подстрока(тз1сРазбиением.ВнутреннийНомер,КоличествоСимволовДоТире.КолСимв+2, СтрДлина.КолСимв) как ПослеТире |поместить тз1сРазбиением |из тз1 как тз1сРазбиением | ЛЕВОЕ СОЕДИНЕНИЕ тзКоличествоСимволов9 КАК КоличествоСимволовДоТире | ПО (тз1сРазбиением.ВнутреннийНомер ПОДОБНО КоличествоСимволовДоТире.Симв+"-%") | ЛЕВОЕ СОЕДИНЕНИЕ тзКоличествоСимволов9 КАК СтрДлина | ПО (тз1сРазбиением.ВнутреннийНомер ПОДОБНО СтрДлина.Симв) |; |Выбрать |тз2сРазбиением.ВнутреннийНомер, |Подстрока(тз2сРазбиением.ВнутреннийНомер,1, КоличествоСимволовДоСлэша.КолСимв) как ДоСлэша, |Подстрока(тз2сРазбиением.ВнутреннийНомер,КоличествоСимволовДоТире.КолСимв+2, СтрДлина.КолСимв) как ПослеТире |поместить тз2сРазбиением |из тз2 как тз2сРазбиением | ЛЕВОЕ СОЕДИНЕНИЕ тзКоличествоСимволов9 КАК КоличествоСимволовДоСлэша | ПО (тз2сРазбиением.ВнутреннийНомер ПОДОБНО КоличествоСимволовДоСлэша.Симв+"/%") | ЛЕВОЕ СОЕДИНЕНИЕ тзКоличествоСимволов9 КАК КоличествоСимволовДоТире | ПО (тз2сРазбиением.ВнутреннийНомер ПОДОБНО КоличествоСимволовДоТире.Симв+"-%") | ЛЕВОЕ СОЕДИНЕНИЕ тзКоличествоСимволов9 КАК СтрДлина | ПО (тз2сРазбиением.ВнутреннийНомер ПОДОБНО СтрДлина.Симв) |; | |ВЫБРАТЬ | тз11.ВнутреннийНомер, | тз22.ВнутреннийНомер |ИЗ | тз1сРазбиением КАК тз11 | Левое СОЕДИНЕНИЕ тз2сРазбиением КАК тз22 | ПО тз11.ДоСлэша Подобно тз22.ДоСлэша | и тз11.ПослеТире Подобно тз22.ПослеТире | |"; Параметр = новый ТаблицаЗначений; Параметр.Колонки.Добавить("ВнутреннийНомер", Новый ОписаниеТипов("Строка")); новстр = Параметр.Добавить(); новстр.ВнутреннийНомер = "30568-12"; новстр = Параметр.Добавить(); новстр.ВнутреннийНомер = "3568-12"; Запрос.УстановитьПараметр("тз1", Параметр); Параметр = новый ТаблицаЗначений; Параметр.Колонки.Добавить("ВнутреннийНомер", Новый ОписаниеТипов("Строка")); новстр = Параметр.Добавить(); новстр.ВнутреннийНомер = "30568/1-12"; новстр = Параметр.Добавить(); новстр.ВнутреннийНомер = "30568/1-11"; новстр = Параметр.Добавить(); новстр.ВнутреннийНомер = "30568/2-12"; новстр = Параметр.Добавить(); новстр.ВнутреннийНомер = "3568/2-12"; новстр = Параметр.Добавить(); новстр.ВнутреннийНомер = "3568/2-13"; Запрос.УстановитьПараметр("тз2", Параметр); Запрос.Текст = Запросы; РЗ = Запрос.Выполнить(); |
|||
1
Новиков
13.04.12
✎
19:50
|
какая ошибка валится?
|
|||
2
Новиков
13.04.12
✎
19:52
|
ну и да, в догонку: в джойнах по чему клеишься - в темпах своих - индексируй эти поля. И да, лайках в джойнах - это адовая жесть!
|
|||
3
catena
13.04.12
✎
19:55
|
(1)Ой, скульная какая-то. Что-то про невозможность чего-то :) Я баловалась, а потом отвлекли работой.
(2)Есть другие идеи? С интересом выслушаю. |
|||
4
ILM
гуру
13.04.12
✎
19:55
|
Совет, попробуй заменить псевдонимы таблиц "ИЗ", на отличные от имени временных таблиц. Был однажды такой же затык, работало с файловой, вылетала на сервере. НЕ использовал имя из строки ПОМЕСТИТЬ в том же запросе, только запрос там был на большее число таблицы.
|
|||
5
ILM
гуру
13.04.12
✎
19:56
|
Я про это
|поместить тз1сРазбиением |из тз1 как тз1сРазбиением |
|||
6
catena
13.04.12
✎
19:57
|
(5)Я поняла, попробую.
|
|||
7
ILM
гуру
13.04.12
✎
19:57
|
Да и у ТЗ длину строки задай для поля хотя бы 20 символов
|
|||
8
ILM
гуру
13.04.12
✎
19:57
|
Параметр.Колонки.Добавить("ВнутреннийНомер", Новый ОписаниеТипов("Строка"));
|
|||
9
ILM
гуру
13.04.12
✎
19:58
|
Может их в SQL превращает в МЕМО поле
|
|||
10
catena
13.04.12
✎
19:59
|
(9)Тоже может :) Ок.
|
|||
11
Новиков
13.04.12
✎
20:00
|
по моему, в тексте скулевой ошибки будут символы "255" =)
|
|||
12
catena
13.04.12
✎
20:00
|
(11)По-моему там было что-то про стринг, так что вполне возможно, что он просто не скушал неограниченные строки.
|
|||
13
Новиков
13.04.12
✎
20:02
|
ну ладно. Как точное будет описалово - пиши.
|
|||
14
hhhh
13.04.12
✎
21:41
|
(12) да, неограниченные строки на файловой проходят всегда, а на скуле не всегда.
|
|||
15
AlexNew
13.04.12
✎
21:51
|
А по моему - убить. Чтоб человек не мучился с такими вопросами. Но с убийством я - пас.
|
|||
16
AlexNew
13.04.12
✎
21:52
|
Гуманный, кстати способ...
|
|||
17
catena
20.04.12
✎
19:16
|
Не сработало ни переименование, ни ограничение строк.
Зато сегодня я принесла ошибку :) http://s019.radikal.ru/i635/1204/46/bf22f4b650c7.gif |
|||
18
catena
20.04.12
✎
19:18
|
Ну и чтоб два раза не ходить:
А почему оракл (да и 1с тоже) при сортировке игнорирует казахские символы? http://s019.radikal.ru/i616/1204/91/62c80cc674fc.jpg |
|||
19
catena
20.04.12
✎
19:19
|
Ой, а еще, еще!
А зачем??? |
|||
20
Лоботряс
20.04.12
✎
19:49
|
Оптимизировать можно так. В четвертом и пятом пакете использовать внутреннее соединение(так будет меньше строк в этих таблицах) вместо левого, а в последнем пакете обе полученные таблицы (тз11 и тз22) левым соединением соединять с тз1.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |