|
v7: Помощь с запросом SQL. Логика запрос | ☑ | ||
---|---|---|---|---|
0
КонечноДа
29.11.15
✎
17:56
|
Нужно отбирать номенклатуру по списку значений свойств (Свойства номенклатуры). Пробовал писать условия так:
ТекстЗапроса = " |SELECT | Номенклатура.ID [Номенклатура $Справочник.Номенклатура] |FROM | $Справочник.Номенклатура AS Номенклатура With (NOLOCK) | INNER JOIN $Справочник.СвойстваНоменклатуры AS СвойстваНоменклатуры With (NOLOCK) ON Номенклатура.ID = СвойстваНоменклатуры.PARENTEXT |WHERE | (Номенклатура.ID IN (SELECT val FROM #Группа)) |AND ($СвойстваНоменклатуры.ЗначениеСвойства = :ФильтрИ1) |AND ($СвойстваНоменклатуры.ЗначениеСвойства = :ФильтрИ2)"; _гЗапрос.УстановитьТекстовыйПараметр("ФильтрИ1",ТекЗначениеСвойстваИ); _гЗапрос.УстановитьТекстовыйПараметр("ФильтрИ2",ТекЗначениеСвойстваИ); запрос не возвращает товары. Оно и понятно, sql думает что я проверяю принадлежность к обоим фильтрам у одного и того же свойства. и так: ТекстЗапроса = " |SELECT | Номенклатура.ID [Номенклатура $Справочник.Номенклатура] |FROM | $Справочник.Номенклатура AS Номенклатура With (NOLOCK) | INNER JOIN $Справочник.СвойстваНоменклатуры AS СвойстваНоменклатуры With (NOLOCK) ON Номенклатура.ID = СвойстваНоменклатуры.PARENTEXT |WHERE | (Номенклатура.ID IN (SELECT val FROM #Группа)) |" ; Если списХарактеристик.РазмерСписка()>0 Тогда _гЗапрос.УложитьСписокОбъектов(списХарактеристик, "#qqq", "ЗначенияСвойств"); ТекстЗапроса=ТекстЗапроса+" AND ($СвойстваНоменклатуры.ЗначениеСвойства = (SELECT val FROM #qqq))"; КонецЕсли; тогда запрос возвращает товары если хоть одно из условий соответствует фильтру. А мне нужно, чтоб если заданы, например, две характеристики, то возвращались только ТЕ ТОВАРЫ, у которых ДВЕ характеристики соответствуют выбранным свойствам. Мне кажется тут с логикой у меня что-то не то, но что делать то? P.S. можно, конечно, сделать прямой запрос в рекурсии, но это зло )) |
|||
2
hhhh
29.11.15
✎
20:33
|
ну тупо делаешь два inner join. Чего ты паришься?
|
|||
3
ADirks
30.11.15
✎
07:53
|
так что ли ?
|SELECT | Номенклатура.ID [Номенклатура $Справочник.Номенклатура] |FROM | $Справочник.Номенклатура AS Номенклатура With (NOLOCK) | INNER JOIN $Справочник.СвойстваНоменклатуры AS СвойстваНоменклатуры With (NOLOCK) ON Номенклатура.ID = СвойстваНоменклатуры.PARENTEXT |WHERE | (Номенклатура.ID IN (SELECT val FROM #Группа)) |AND $СвойстваНоменклатуры.ЗначениеСвойства In (:ФильтрИ1, :ФильтрИ2) |
|||
4
hhhh
30.11.15
✎
09:24
|
| INNER JOIN $Справочник.СвойстваНоменклатуры AS СвойстваНоменклатуры1 With (NOLOCK) ON Номенклатура.ID = СвойстваНоменклатуры1.PARENTEXT
|AND | (Номенклатура.ID IN (SELECT val FROM #Группа)) |AND $СвойстваНоменклатуры1.ЗначениеСвойства In (:ФильтрИ1) | INNER JOIN $Справочник.СвойстваНоменклатуры AS СвойстваНоменклатуры2 With (NOLOCK) ON Номенклатура.ID = СвойстваНоменклатуры2.PARENTEXT |AND $СвойстваНоменклатуры2.ЗначениеСвойства In (:ФильтрИ2) |
|||
5
hhhh
30.11.15
✎
09:25
|
| INNER JOIN $Справочник.СвойстваНоменклатуры AS СвойстваНоменклатуры1 With (NOLOCK) ON Номенклатура.ID = СвойстваНоменклатуры1.PARENTEXT
|AND | (Номенклатура.ID IN (SELECT val FROM #Группа)) |AND $СвойстваНоменклатуры1.ЗначениеСвойства In (:ФильтрИ1) | INNER JOIN $Справочник.СвойстваНоменклатуры AS СвойстваНоменклатуры2 With (NOLOCK) ON Номенклатура.ID = СвойстваНоменклатуры2.PARENTEXT |AND | (Номенклатура.ID IN (SELECT val FROM #Группа)) |AND $СвойстваНоменклатуры2.ЗначениеСвойства In (:ФильтрИ2) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |