|
Как сделать "двойное" условие запросе для конструкции "В"? | ☑ | ||
---|---|---|---|---|
0
ИС-2
naïve
27.05.13
✎
16:39
|
Как написать такое двойное условие в запросе? Видел, что делали такие выражения, но не помню где
И, вообще, насколько правильно использовать условие в иерархии для связей? ВТ_Док.Координата В ИЕРАРХИИ, ВТ_ВТ_Док.Организация в (ВЫБРАТЬ ВТ_Координаты.Координата, ВТ_Координаты.Организация ИЗ ВТ_Координаты КАК ВТ_Координаты) |
|||
1
mikecool
27.05.13
✎
16:40
|
(ВТ_Док.Координата, ВТ_ВТ_Док.Организация) В ИЕРАРХИИ
(ВЫБРАТЬ ВТ_Координаты.Координата, ВТ_Координаты.Организация ИЗ ВТ_Координаты КАК ВТ_Координаты) |
|||
2
mikecool
27.05.13
✎
16:40
|
но имхо - не взлетит, проверять надо
|
|||
3
ssh2012
27.05.13
✎
16:42
|
(0) > насколько правильно использовать условие в иерархии для связей?
В условиях связей нельзя исп-ть В ИЕРАРХИИ |
|||
4
H A D G E H O G s
27.05.13
✎
16:43
|
В ИЕРАРХИИ использовать не правильно.
И, как показала недавняя эмпирика, (Таблица1.Значение1, Таблица1.Значение2) В (ВЫБРАТЬ Таблица2.Значение1, Таблица2.Значение2 ИЗ Таблица2 КАК Таблица2) Тоже не гуд. |
|||
5
H A D G E H O G s
27.05.13
✎
16:43
|
(4) Лучше ВНУТРЕННЕЕ СОЕНИДЕНИЕ.
|
|||
6
mikecool
27.05.13
✎
16:44
|
(4) а чт оза эмпирика получилась?
|
|||
7
H A D G E H O G s
27.05.13
✎
16:45
|
||||
8
acsent
27.05.13
✎
16:47
|
(5) так это и есть внутреннее соединение, разве нет?
|
|||
9
mikecool
27.05.13
✎
16:48
|
(8) судя по всему - нет
|
|||
10
ИС-2
naïve
27.05.13
✎
16:54
|
(3) тоже так думаю. Но пока буду
(4) спасибо (5) дык не получается сделать. Надо ВТ_Док.Координата в иерархии(ВТ_Координаты.Координата) такую конструкцию тоже не хочет ВЫБОР КОГДА ИСТИНА В (ВЫБРАТЬ ВТ_3_КоординатаОрганизация.ЕстьЗапись ИЗ ВТ_3_КоординатаОрганизация КАК ВТ_3_КоординатаОрганизация) ТОГДА ЛОЖЬ ИНАЧЕ (ВТ_Док.Координата, ВТ_Док.Организация) В иерархии (ВЫБРАТЬ ВТ_Координаты.Координата, ВТ_Координаты.Организация ИЗ ВТ_Координаты КАК ВТ_Координаты) И ВТ_Координаты.Организация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) КОНЕЦ |
|||
11
Sorm
27.05.13
✎
16:56
|
(0) Временная таблица и джойн. Особенно в нагруженных системах, массовых запросах.
|
|||
12
ИС-2
naïve
27.05.13
✎
17:16
|
выше
|
|||
13
Fragster
гуру
27.05.13
✎
17:20
|
а что в (7) решили? что 100%? получается RLS всегда фуллскан, чтоли?
|
|||
14
Fragster
гуру
27.05.13
✎
17:21
|
а, не, я тупой после инфостарта что-то
|
|||
15
Serginio1
27.05.13
✎
17:23
|
(4) Можно по другому пойти
(Таблица1.Значение1) В (ВЫБРАТЬ Таблица2.Значение1 ИЗ Таблица2 КАК Таблица2 Где Таблица2.Значение2=Таблица1.Значение2) Желательно, что бы Значение2 было индексировано |
|||
16
ИС-2
naïve
27.05.13
✎
17:28
|
(15) только Таблица1.Значение2 не содержиться в этой выборке
|
|||
17
Serginio1
27.05.13
✎
17:29
|
v8: Подзапросы с Выбрать Первые
приходилось отбирать во временную таблицу а затем индексировать. Правда в последующих версиях нельзя использовать кортеж из двух и более если есть поля первой таблицы в условиях Выбрать * Из Таблица как таблица Где (Объект, СчетФактура) В (Выбрать первые 1 док.Объект,док.Счетфактура из ИЗ Документ КАК Док ГДЕ Док.Ссылка = ТаблицаВЗапросе.Ссылка УПОРЯДОЧИТЬ ПО НужныеПля) Это проходило в v8: Подзапросы с Выбрать Первые Но затем они если поле таблицы учавствут в ограничении, в условии можно использовать только одно поле. "Недопустимо использовать упорядочивание внутри запроса, вложенного в операцию В с множественными операндами, если есть обращения к полям внешнего запроса" v8: запрос. найти посл. поступление! Иможно использовать только ВЫБРАТЬ втИндекс.Ссылка КАК Ссылка, втИндекс.Номенлатура КАК Номенлатура ИЗ втИндекс КАК втИндекс ГДЕ (втИндекс.Ссылка) В (ВЫБРАТЬ ПЕРВЫЕ 1 док.Ссылка ИЗ втИндексКАК Док ГДЕ Док.Номенклатура=втИндекс.Номенлатура УПОРЯДОЧИТЬ ПО Док.Дата УБЫВ ,Док.Ссылка) УПОРЯДОЧИТЬ ПО МоментВремени |
|||
18
Serginio1
27.05.13
✎
17:32
|
||||
19
Fragster
гуру
27.05.13
✎
17:34
|
(17)(18) да, так работает, но медленновато
|
|||
20
Fragster
гуру
27.05.13
✎
17:34
|
даже с индексом получаем фулскан основной + 100500 индекс сиков по индексированной вложенной
|
|||
21
Serginio1
27.05.13
✎
17:51
|
(20) Не знаю. У меня очень быстро работало на таблицах с 4 млн. записей. Там получался такой запросс
ВЫБРАТЬ втИндекс.Ссылка КАК Ссылка, втИндекс.Номенлатура КАК Номенлатура ИЗ втИндекс КАК втИндекс ГДЕ (втИндекс.Ссылка) В (ВЫБРАТЬ ПЕРВЫЕ 1 док.Ссылка ИЗ втИндексКАК Док ГДЕ Док.Номенклатура=втИндекс.Номенлатура УПОРЯДОЧИТЬ ПО Док.Дата УБЫВ ,Док.Ссылка) УПОРЯДОЧИТЬ ПО МоментВремени Где BT была упорядочена по Ссылка,Номенклатура,Дата |
|||
22
Serginio1
27.05.13
✎
17:53
|
Вернее проиндексировано
|
|||
23
Fragster
гуру
27.05.13
✎
17:55
|
(21) а план что показывал? у меня на классическом примере с курсом валют (правда "первые 2")
вот так: wstaw.org/m/2013/05/16/0.png |
|||
24
Serginio1
27.05.13
✎
18:01
|
(23) Честно не смотрел. Просто в той ж v8: Подзапросы с Выбрать Первые
там индексирование временной таблицы давало огромный эффект. Мне нужно было найти прайс с минимальной ценой и максимальном количеством остатков (может быть несколько прайсов с одинаковой ценой). То есть в 21 это временная таблица проиндексированная по нужным полям. |
|||
25
Serginio1
27.05.13
✎
18:02
|
23 v8: Подзапросы с Выбрать Первые
смотри 40 |
|||
26
Fragster
гуру
27.05.13
✎
18:16
|
(25) а план-то где?
|
|||
27
Serginio1
27.05.13
✎
18:26
|
(26) А не делал. Мне интересно было заставить быстро работать. Там генерация запроса.
У меня свой план в голове. |
|||
28
Fragster
гуру
27.05.13
✎
18:28
|
(27) 0,1 и 0,01 визуально работают практически одинаково, но нагрузку дают разную и когда народу много - очень разные порой артефакты вылезают
|
|||
29
Fragster
гуру
27.05.13
✎
18:28
|
0.1 и 0.01 секунды
|
|||
30
Serginio1
27.05.13
✎
18:28
|
Я вот одного не пойму почему они EXISTS не введут.Вроде как стандарт SQL.
|
|||
31
Fragster
гуру
27.05.13
✎
18:29
|
(30) не SQl, а T-SQL - мелкософтовского диалекта
|
|||
32
Serginio1
27.05.13
✎
18:34
|
EXISTS это стандарт SQL 92
wiki:SQL-92 http://az-design.ru/index.shtml?Support&DataBase&SQL/CelkoJ/01h015 |
|||
33
Fragster
гуру
27.05.13
✎
18:40
|
(32) ну тогда может посчитали, что Где 1 в (выбрать первые 1) достаточно. тем более, что они сами на эксистс частенько заменяют язык запросов 1с, например для (поле 1, поле2) в (выбрать...)
|
|||
34
Serginio1
27.05.13
✎
18:44
|
(33) Там же v8: Подзапросы с Выбрать Первые
40,41 Вариант WHERE EXISTS( SELECT CAST(1 AS NUMERIC(1,0)) AS f_1 FROM ( SELECT TOP 1 #Te85f61ac690c437aaf9abb367656dabb_Q_002_T_001._Q_000_F_000RRef AS _Q_002_F_000RRef, #Te85f61ac690c437aaf9abb367656dabb_Q_002_T_001._Q_000_F_001 AS _Q_002_F_001 FROM #tt7 #Te85f61ac690c437aaf9abb367656dabb_Q_002_T_001 WITH(NOLOCK) WHERE #Te85f61ac690c437aaf9abb367656dabb_Q_002_T_001._Q_000_F_000RRef = #Te85f61ac690c437aaf9abb367656dabb_Q_001_T_001._Q_000_F_000RRef ORDER BY #Te85f61ac690c437aaf9abb367656dabb_Q_002_T_001._Q_000_F_003 DESC, #Te85f61ac690c437aaf9abb367656dabb_Q_002_T_001._Q_000_F_004 DESC ) #V8TblAli1 WHERE #Te85f61ac690c437aaf9abb367656dabb_Q_001_T_001._Q_000_F_000RRef = #V8TblAli1._Q_002_F_000RRef AND #Te85f61ac690c437aaf9abb367656dabb_Q_001_T_001._Q_000_F_001 = #V8TblAli1._Q_002_F_001) |
|||
35
Serginio1
27.05.13
✎
18:58
|
Мало того например используя в в 7 ке 1С++ я могу добавить в текст запроса отсебятину, которая прекрасно проходит.
Declare @ЗаказНаФабрику as char(9); SELECT @ЗаказНаФабрику=Журнал7.IDDOC FROM _1SJOURN AS Журнал7 With (NOLOCK) WHERE (Журнал7.IDDOCDEF = 2742) AND (Журнал7.DOCNO = 'РГ07814'); SELECT * FROM $Регистр.Тест AS Тест WHERE (Тест.DEBKRED=1) and AND ($Тест.ЗаказНаФабрику = @ЗаказНаФабрику) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |