|
подскажите с запросом к документам с услугами без товаров | ☑ | ||
---|---|---|---|---|
0
dvrk
06.12.22
✎
12:53
|
Привет, мне нужно выбрать документы, где в ТЧ Товары 0 строк, в ТЧ услуги >0 строк, как это в запросе указать?
|
|||
1
Ryzeman
06.12.22
✎
12:59
|
ВЫБРАТЬ РАЗЛИЧНЫЕ
ДокументТЧУслуги.Ссылка КАК СсылкаНаДокумент ИЗ Документ.МойДокумент.Услуги КАК ДокументТЧУслуги ЛЕВОЕ СОЕДИНЕНИЕ Документ.МойДокумент.Товары КАК ДокументТЧТовары ПО ДокументТЧУслуги.Ссылка = ДокументТЧТовары.Ссылка ГДЕ ДокументТЧТовары.Ссылка ЕСТЬ NULL |
|||
2
Ryzeman
06.12.22
✎
12:59
|
Можно и лучше, но мне лень думать
|
|||
3
Волшебник
модератор
06.12.22
✎
13:00
|
ВЫБРАТЬ Ссылка ИЗ Документ.ИмяДок КАК Док
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ИмяДок.Товары КАК ТЧ_Товары ПО ТЧ_Товары.Ссылка = Док.Ссылка ГДЕ ТЧ_Товары.Номенклатура ЕСТЬ NULL И Ссылка В (ВЫБРАТЬ РАЗЛИЧНЫЕ Ссылка ИЗ Документ.ИмяДок.Услуги) |
|||
4
dvrk
06.12.22
✎
13:00
|
такое условие норм?
КОЛИЧЕСТВО(РеализацияТоваровУслуг.Товары.НомерСтроки) = 0 и КОЛИЧЕСТВО(РеализацияТоваровУслуг.Товары.НомерСтроки) > 0 |
|||
5
Волшебник
модератор
06.12.22
✎
13:01
|
(4) жесть
|
|||
6
dvrk
06.12.22
✎
13:02
|
(5) что
|
|||
7
Kassern
06.12.22
✎
13:13
|
(4) То что у вас одна ТЧ в условии это опечатка, или так задумано?)
|
|||
8
Kassern
06.12.22
✎
13:13
|
Какая конфигурация?
|
|||
9
dvrk
06.12.22
✎
13:15
|
(7) ну опечатался, УТ 10
КОЛИЧЕСТВО(РеализацияТоваровУслуг.Товары.НомерСтроки) = 0 И КОЛИЧЕСТВО(РеализацияТоваровУслуг.Услуги.НомерСтроки) > 0 |
|||
10
Ryzeman
06.12.22
✎
13:18
|
(9) Это будет работать но в разы дольше чем (1) или (3). Агрегатная функция в условии и те же два соединения как (3) но в условии.
|
|||
11
dvrk
06.12.22
✎
13:30
|
(10) спасибо
|
|||
12
hockeyist
12.12.22
✎
20:54
|
Трансформеры сказали:
ВЫБРАТЬ РАЗЛИЧНЫЕ ДокументТЧУслуги.Ссылка ИЗ Документ.МойДокумент.Услуги КАК ДокументТЧУслуги ГДЕ ДокументТЧУслуги.Ссылка НЕ В (ВЫБРАТЬ ДокументТЧТовары.Ссылка ИЗ Документ.МойДокумент.Товары КАК ДокументТЧТовары) Неплохо вышло |
|||
13
hockeyist
12.12.22
✎
21:13
|
Если быть точным, то
SELECT DISTINCT id FROM tab1 WHERE id NOT IN (SELECT id FROM tab2) Это я уже на 1С-овский перевел |
|||
14
Said_We
12.12.22
✎
22:50
|
(13) "(SELECT id FROM tab2)" можно тоже нарисовать "(SELECT DISTINCT id FROM tab2)".
Но автор в (4) в правильном направлении думал. По сути нужна хотя бы одна строка, поэтому можно вместо DISTINCT использовать условия для каждой из таблиц. Если по аналогии, то: where tab1.НомерСтроки = 1 а для второй таблицы where tab2.НомерСтроки = 1 Отработать должно ещё быстрее чем DISTINCT |
|||
15
hockeyist
12.12.22
✎
22:56
|
(14) До этого GPT-3 не додумалась. Но все равно не плохо
|
|||
16
Said_We
12.12.22
✎
23:07
|
Писал на коленке. Если нигде не напортачил, то примерно так:
ВЫБРАТЬ тчУслуги.Ссылка ИЗ Документ.МойДокумент.Услуги КАК тчУслуги ГДЕ тчУслуги.НомерСтроки = 1 И тчУслуги.Ссылка НЕ В (ВЫБРАТЬ т.Ссылка ИЗ Документ.МойДокумент.Товары КАК т ГДЕ т.НомерСтроки = 1) Если вариант (1) тоже до левого соединения таблицы обрезать, то будет примерно такой же результат по времени как и "НЕ В (Выбрать...". На мой взгляд, более читабельная и естественная конструкция "НЕ В (выбрать...". |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |