![]() |
|
Проверка отсутствия строк | ☑ | ||
---|---|---|---|---|
0
psknyazev
07.01.12
✎
19:48
|
Есть справочник с табличной частью, в которой две колонки. Назовем их "Свойство" и "Значение". Возможно ли запросом выбрать элементы где "Свойство" и "Значение" совпадают с заданными либо строка с заданным "Свойством" отсутствует вовсе? Выбрать элементы с совпадением проблем нет, а как можно включить в результат запроса элементы, в табличной части которых строка с заданным "Свойством" отсутствует?
Просьба не посылать за книгами или баблом. Лучше просто промолчите :) |
|||
1
kotletka
07.01.12
✎
20:02
|
NULL ?
|
|||
2
psknyazev
07.01.12
✎
20:06
|
Не пройдет. Проблема не в том, что "Значение" у данного "Свойства" не задано, а в том, что строки с таким "Свойством" может вообще не быть.
А насколько я помню NULL - пустое значение. |
|||
3
kotletka
07.01.12
✎
20:07
|
null -когда строки нет
|
|||
4
psknyazev
07.01.12
✎
20:20
|
Это мой запрос
ВЫБРАТЬ ГруппировкиХарактеристикСвойстваИЗначения.Ссылка КАК Ссылка ИЗ Справочник.ГруппировкиХарактеристик.СвойстваИЗначения КАК ГруппировкиХарактеристикСвойстваИЗначения ГДЕ ГруппировкиХарактеристикСвойстваИЗначения.Свойство ЕСТЬ NULL Где ступил? |
|||
5
hhhh
07.01.12
✎
20:22
|
вообще нет проверки заданного свойства. И соединений не видно.
|
|||
6
patapum
07.01.12
✎
20:22
|
а отдельно два запроса можешь написать? а потом их собрать по Объединить
|
|||
7
psknyazev
07.01.12
✎
20:24
|
Так приведенный запрос и должен выбрать только те элементы, у которых свойство не указано. Соединения я потом сделаю.
|
|||
8
psknyazev
07.01.12
✎
20:25
|
ВЫБРАТЬ
ГруппировкиХарактеристикСвойстваИЗначения.Ссылка КАК Ссылка ИЗ Справочник.ГруппировкиХарактеристик.СвойстваИЗначения КАК ГруппировкиХарактеристикСвойстваИЗначения ГДЕ ГруппировкиХарактеристикСвойстваИЗначения.Свойство ЕСТЬ NULL; |
|||
9
psknyazev
07.01.12
✎
20:26
|
че то код неверно выделяется.
Вот условие: ГДЕ ГруппировкиХарактеристикСвойстваИЗначения.Свойство ЕСТЬ NULL; |
|||
10
Buster007
07.01.12
✎
20:47
|
мдя... без свойства может быть значение? и свойство какого типа?
|
|||
11
psknyazev
07.01.12
✎
21:01
|
Вот описание условия, при котором элемент должен попасть в результат запроса:
(Свойство=&ЗаданноеСвойство И Значение=&ЗаданноеЗначение) ИЛИ (....Строка, содержащая &ЗаданноеСвойство отсутствует....) Меня интересует, как в запросе описать условие, указанное во вторых скобках? |
|||
12
andrewks
07.01.12
✎
21:02
|
выбери табл часть в соединении с спр. свойств
|
|||
13
psknyazev
07.01.12
✎
21:10
|
Не понял..
|
|||
14
psknyazev
07.01.12
✎
21:12
|
пока соединения не касаюсь..
В данный момент мне нужно только: Если (....Строка, содержащая &ЗаданноеСвойство отсутствует....) Тогда Включаем в результат Иначе Не включаем Вот как такой запрос составить? |
|||
15
ЗашелСпросить
07.01.12
✎
21:13
|
||||
16
andrewks
07.01.12
✎
21:13
|
(13)понимаешь, язык sql - это тебе не паскаль, и не си. его нужно понять, прочувствовать его логику. это как пролог - перед тем, как сесть писать программу на прологе, нужно выкинуть из памяти всё то, что знаешь из алгоритмических языков
|
|||
17
psknyazev
07.01.12
✎
21:16
|
В общем пять строк кода никто привести не может?
|
|||
18
psknyazev
07.01.12
✎
21:20
|
Давайте на другом примере: Нужно выбрать документы реализации, у которых в табличной части НЕТ определенной номенклатуры. Запрос на пять - семь строк, неужели ни у кого подобной задачи не возникало?
|
|||
19
andrewks
07.01.12
✎
21:22
|
покажи запрос, который у тебя сейчас (полный)
|
|||
20
H A D G E H O G s
07.01.12
✎
21:22
|
Лениво.
|
|||
21
H A D G E H O G s
07.01.12
✎
21:23
|
(16) Пусть вам Пролог в липких ночных кошмарах присниться.
"Джон овладевает бананом" © Иносказательный пересказ условия задачи на паре по Прологу. |
|||
22
andrewks
07.01.12
✎
21:25
|
(18) и в чём проблема? делай соединение со справочником номенклатуры
(21) :-) |
|||
23
psknyazev
07.01.12
✎
21:25
|
"|ВЫБРАТЬ
| ГруппировкиХарактеристикСвойстваИЗначения.Ссылка |ИЗ | Справочник.ГруппировкиХарактеристик.СвойстваИЗначения КАК ГруппировкиХарактеристикСвойстваИЗначения |ГДЕ | ГруппировкиХарактеристикСвойстваИЗначения.Свойство ЕСТЬ NULL |"; |
|||
24
andrewks
07.01.12
✎
21:26
|
(23) я сказал - полный. ты говорил, что сейчас уже он у тебя выбирает по условию заданного свойства там, и т.д. где он?
|
|||
25
psknyazev
07.01.12
✎
21:29
|
ВЫБРАТЬ
ГруппировкиХарактеристик.Ссылка ИЗ (ВЫБРАТЬ ГруппировкиХарактеристикСвойстваИЗначения.Ссылка КАК Ссылка ИЗ Справочник.ГруппировкиХарактеристик.СвойстваИЗначения КАК ГруппировкиХарактеристикСвойстваИЗначения ГДЕ ГруппировкиХарактеристикСвойстваИЗначения.Свойство = &Свойство И ГруппировкиХарактеристикСвойстваИЗначения.Значение = &Значение) КАК ПоСовпадению ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппировкиХарактеристик КАК ГруппировкиХарактеристик ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ГруппировкиХарактеристикСвойстваИЗначения.Ссылка КАК Ссылка ИЗ Справочник.ГруппировкиХарактеристик.СвойстваИЗначения КАК ГруппировкиХарактеристикСвойстваИЗначения ГДЕ ГруппировкиХарактеристикСвойстваИЗначения.Свойство ЕСТЬ NULL ) КАК ПоОтсутствию ПО ПоОтсутствию.Ссылка = ГруппировкиХарактеристик.Ссылка ПО ПоСовпадению.Ссылка = ГруппировкиХарактеристик.Ссылка |
|||
26
Фокусник
07.01.12
✎
21:33
|
(0) нужно таблицу со всеми свойствами соединить (левое соединение) с таблицей из тч справочника, содержащей значения. В колонке Значения будут либу существующие значения, либо нулл
|
|||
27
psknyazev
07.01.12
✎
21:43
|
Свойства я могу получить только в виде таблицы значений.
|
|||
29
H A D G E H O G s
07.01.12
✎
21:44
|
пардон
ВЫБРАТЬ РеализацияТоваровУслугТовары.Ссылка, СУММА(ВЫБОР КОГДА РеализацияТоваровУслугТовары.Номенклатура = &НенужнаяНоменклатура ТОГДА 0 ИНАЧЕ 1 КОНЕЦ) КАК КоличествоВерныхСтрок, СУММА(1) КАК КоличествоСтрок ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары СГРУППИРОВАТЬ ПО РеализацияТоваровУслугТовары.Ссылка ИМЕЮЩИЕ СУММА(ВЫБОР КОГДА РеализацияТоваровУслугТовары.Номенклатура = &НенужнаяНоменклатура ТОГДА 0 ИНАЧЕ 1 КОНЕЦ) = СУММА(1) |
|||
30
H A D G E H O G s
07.01.12
✎
21:44
|
Без всяких лишних Соединений.
|
|||
31
GROOVY
07.01.12
✎
21:45
|
(27) Вам же уже неоднократно написали: надо соединить справочник с таблицей свойств и делать проверку на неприсоединенное значение. Что еще непонятного? Какая разница в виде чего у Вас таблица с свойсвами?
|
|||
32
psknyazev
07.01.12
✎
22:00
|
В табличной части может вообще не быть строки с таким свойством, в этом случае соединения не произойдет, связывать не по чему. Или я неправ?
|
|||
33
GROOVY
07.01.12
✎
22:03
|
Из справочника выбираем все, из таблицы со свойствами по условию соедиения пытаемся выбрать соответствия, опосля проверяем исоединились свойства или нет.
|
|||
34
psknyazev
07.01.12
✎
22:03
|
Вот пример справочника:
Элемент1 Размер - 104 Цвет - Белый Элемент2 Размер - 110 Цвет - Черный Элемент3 Размер - 104 Мне нужно, чтобы при условии "Размер - 104, Цвет - Белый" в результат попали Элемент1 и Элемент3 |
|||
35
GROOVY
07.01.12
✎
22:08
|
ВЫБРАТЬ
Спр.Ссылка ИЗ Справочник.НАЗВАНИЕСПРАВОЧНИКА КАК Спр ЛЕВОЕ СОЕДИНЕНИЕ НАЗВАНИЕТАБЛИЦЫССВОЙСТВАМИ КАК Свойства ПО Спр.Ссылка = Свойства.Номенклатура ГДЕ Свойства.Свойство = &НужноеСвойство ИЛИ Свойства.Свойство ЕСТЬ NULL |
|||
36
GROOVY
07.01.12
✎
22:10
|
(34) А почему под описанные условия не попадает Элемент2? У него ведь нет свойства "Цвет"!
Вообще похоже что условие нужно и на вид свойства и на само свойство. Условие описано в задаче криво. Попробйте сформулировать точное условие хотя бы на русском языке. |
|||
37
psknyazev
07.01.12
✎
22:11
|
У элемента2 цвет - черный
|
|||
38
psknyazev
07.01.12
✎
22:13
|
У элемента2 цвет - черный. Поэтому и не попадает.
|
|||
39
GROOVY
07.01.12
✎
22:15
|
Ну тогда в условии соединения надо добавить условие на вид свойства, а в где ничего не поменяется.
Вроде бы. Не проверял. |
|||
40
psknyazev
07.01.12
✎
22:15
|
Справочник со свойствами никак не связан со справочником номенклатуры и о номенклатуре речи вообще не было.
|
|||
41
GROOVY
07.01.12
✎
22:17
|
(40) Элемент1, Элемент2 какой тип значения имеют?
|
|||
42
psknyazev
07.01.12
✎
22:20
|
Это просто элементы справочника, а у них в табличной части уже идет сопоставление (то что я под ними написал)
|
|||
43
GROOVY
07.01.12
✎
22:23
|
(42) Если у элемента не заполнена таблица с "сопоставлениями" он по условию должен попасть в выборку?
|
|||
44
psknyazev
07.01.12
✎
22:26
|
Она может быть заполнена частично, либо не заполнена вовсе. В обоих случаях должна попасть.
|
|||
45
psknyazev
07.01.12
✎
22:27
|
Ну в смысле элемент должен попасть
|
|||
46
GROOVY
07.01.12
✎
22:29
|
(45) Следовательно первичная выборка должна быть из таблицы справонника где гарантированно есть все элементы, а потом уже на нее накладывать условия надо, на свойства или на то что их нет.
|
|||
47
psknyazev
07.01.12
✎
22:32
|
ВЫБРАТЬ
ГруппировкиХарактеристик.Ссылка ИЗ Справочник.ГруппировкиХарактеристик КАК ГруппировкиХарактеристик ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппировкиХарактеристик.СвойстваИЗначения КАК ГруппировкиХарактеристикСвойстваИЗначения ПО (ГруппировкиХарактеристикСвойстваИЗначения.Свойство = &Свойство0) И (ГруппировкиХарактеристикСвойстваИЗначения.Значение = &Значение0) И ГруппировкиХарактеристик.Ссылка = ГруппировкиХарактеристикСвойстваИЗначения.Ссылка ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппировкиХарактеристик.СвойстваИЗначения КАК ГруппировкиХарактеристикСвойстваИЗначения1 ПО (ГруппировкиХарактеристикСвойстваИЗначения1.Свойство = &Свойство1) И (ГруппировкиХарактеристикСвойстваИЗначения1.Значение = &Значение1) И ГруппировкиХарактеристик.Ссылка = ГруппировкиХарактеристикСвойстваИЗначения1.Ссылка ГДЕ (ГруппировкиХарактеристикСвойстваИЗначения.Свойство = &Свойство0 ИЛИ ГруппировкиХарактеристикСвойстваИЗначения.Свойство ЕСТЬ NULL) И (ГруппировкиХарактеристикСвойстваИЗначения1.Свойство = &Свойство1 ИЛИ ГруппировкиХарактеристикСвойстваИЗначения1.Свойство ЕСТЬ NULL) Пробовал так, но так выбирает точное совпадение. |
|||
48
psknyazev
07.01.12
✎
22:34
|
Если есть элемент у которого Свойство совпадает со свойством0, а Значение совпадает со Значением0, но вообще нет упоминаний о Свойстве1 - он не попадает в такую выборку.
|
|||
49
GROOVY
07.01.12
✎
22:34
|
(47) Внимательно читаем (35) Особенно последнюю строку.
Зачем два соединения делать?! |
|||
50
psknyazev
07.01.12
✎
22:39
|
ВЫБРАТЬ
ГруппировкиХарактеристик.Ссылка ИЗ Справочник.ГруппировкиХарактеристик КАК ГруппировкиХарактеристик ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппировкиХарактеристик.СвойстваИЗначения КАК ГруппировкиХарактеристикСвойстваИЗначения ПО ГруппировкиХарактеристик.Ссылка = ГруппировкиХарактеристикСвойстваИЗначения.Ссылка ГДЕ ((ГруппировкиХарактеристикСвойстваИЗначения.Свойство = &Свойство0 И ГруппировкиХарактеристикСвойстваИЗначения.Значение = &Значение0) ИЛИ ГруппировкиХарактеристикСвойстваИЗначения.Свойство ЕСТЬ NULL ) И ((ГруппировкиХарактеристикСвойстваИЗначения.Свойство = &Свойство1 И ГруппировкиХарактеристикСвойстваИЗначения.Значение = &Значение1) ИЛИ ГруппировкиХарактеристикСвойстваИЗначения.Свойство ЕСТЬ NULL ) Так вообще не отрабатывает. |
|||
51
GROOVY
07.01.12
✎
22:43
|
(50) Естественно, у Вас же противоречивое условие "Свойство = Свойство1 И Свойство = Свойство0" - это условие всегда будет ложным.
|
|||
52
psknyazev
07.01.12
✎
22:44
|
Так свойств то может быть несколько. Поэтому и сделаны были несколько соединений.
|
|||
53
GROOVY
07.01.12
✎
22:46
|
(52) Даже после этой фразы условие никогда не вернет Истину.
|
|||
54
psknyazev
07.01.12
✎
22:48
|
Да я понял... я про предыдущий запрос. там где два соединения.
|
|||
55
GROOVY
07.01.12
✎
22:48
|
В условие соединения добавьте условие не свойства (через оператор "В").
В условие ГДЕ добавьте также проверку на вхождение в список, а лучше на сочетание (Свойство, Значение) В (ВЫБРАТЬ &Свойство, &Значение) ИЛИ Значение ЕСТЬ NULL. Как то так. |
|||
56
psknyazev
07.01.12
✎
23:08
|
Результат не поменялся. Ладно, посижу еще подумаю. Спасибо за помощь.
|
|||
57
andrewks
07.01.12
✎
23:24
|
(29) как насчёт доков с пустыми ТЧ? или если анализируемых позиций номенклатуры несколько?
|
|||
58
andrewks
07.01.12
✎
23:47
|
+(57)
у меня как-то так получилось:
|
|||
59
psknyazev
08.01.12
✎
01:10
|
Вопрос остается открытым:
ВЫБРАТЬ ГруппировкиХарактеристик.Ссылка, ГруппировкиХарактеристикСвойстваИЗначения.Свойство, ГруппировкиХарактеристикСвойстваИЗначения.Значение ИЗ Справочник.ГруппировкиХарактеристик КАК ГруппировкиХарактеристик ПОЛНОЕ СОЕДИНЕНИЕ Справочник.ГруппировкиХарактеристик.СвойстваИЗначения КАК ГруппировкиХарактеристикСвойстваИЗначения ПО ГруппировкиХарактеристик.Ссылка = ГруппировкиХарактеристикСвойстваИЗначения.Ссылка ПОЛНОЕ СОЕДИНЕНИЕ Справочник.ГруппировкиХарактеристик.СвойстваИЗначения КАК ГруппировкиХарактеристикСвойстваИЗначения1 ПО ГруппировкиХарактеристик.Ссылка = ГруппировкиХарактеристикСвойстваИЗначения1.Ссылка ГДЕ (ГруппировкиХарактеристикСвойстваИЗначения.Ссылка ЕСТЬ NULL ИЛИ ГруппировкиХарактеристикСвойстваИЗначения.Значение = &Значение0) И (ГруппировкиХарактеристикСвойстваИЗначения1.Ссылка ЕСТЬ NULL ИЛИ ГруппировкиХарактеристикСвойстваИЗначения1.Значение = &Значение1) С этим запросом в результат попадает и элемент, у которого оба свойства совпадают, и элемент, у которого вообще не заполнена табличная часть. Стоит в него добавить даже пустую строку, как он пропадает из результата. Что не так? |
|||
60
andrewks
08.01.12
✎
11:16
|
(59) ты не читатель, да?
вот тебе ещё один пример с документами, для справочников аналогично
|
|||
61
psknyazev
08.01.12
✎
13:36
|
Вот конечный вариант:
ВЫБРАТЬ Группировки.Ссылка ИЗ Справочник.ГруппировкиХарактеристик КАК Группировки ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппировкиХарактеристик.СвойстваИЗначения КАК ГруппировкиХарактеристикСвойстваИЗначения ПО Группировки.Ссылка = ГруппировкиХарактеристикСвойстваИЗначения.Ссылка ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппировкиХарактеристик.СвойстваИЗначения КАК ГруппировкиХарактеристикСвойстваИЗначения1 ПО Группировки.Ссылка = ГруппировкиХарактеристикСвойстваИЗначения1.Ссылка СГРУППИРОВАТЬ ПО Группировки.Ссылка ИМЕЮЩИЕ (СУММА(ВЫБОР КОГДА ГруппировкиХарактеристикСвойстваИЗначения.Свойство = &Свойство0 И ГруппировкиХарактеристикСвойстваИЗначения.Значение = &Значение0 И ГруппировкиХарактеристикСвойстваИЗначения1.Свойство = &Свойство1 И ГруппировкиХарактеристикСвойстваИЗначения1.Значение = &Значение1 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ) > 0 ИЛИ СУММА(ВЫБОР КОГДА ГруппировкиХарактеристикСвойстваИЗначения.Свойство = &Свойство0 И ГруппировкиХарактеристикСвойстваИЗначения1.Свойство = &Свойство1 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ) = 0) УПОРЯДОЧИТЬ ПО Группировки.Ссылка Пока вроде работает как надо. |
|||
62
psknyazev
08.01.12
✎
13:41
|
andrewks, спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |