Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Горячая тема (более 10 ответов) Объединение двух запросов (число прочтений - 5924 )
zeek
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 16. Апреля 2008
Объединение двух запросов
16. Апреля 2008 :: 11:12
Печать  
Есть два запроса. В первом ищем по названиям элементы, а во втором номеклатуру с этими элементами. Как их объеденить?
|SELECT Соответствия.ID [Элемент $Справочник.Соответствия]
|FROM $Справочник.Соответствия AS Соответствия
|WHERE
|LOWER(Соответствия.DESCR) Like "+Шаблон("'%[НРег(Стр)]%'");

и

|SELECT Товары.ID [Элемент $Справочник.Товары]
|FROM
|$Справочник.Товары AS Товары
|WHERE ($Товары.Альтернатива = :Соотв)
  
Наверх
 
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Объединение двух запросов
Ответ #1 - 16. Апреля 2008 :: 13:40
Печать  
через INNER JOIN

гдето так:
SELECT Товары.ID [Элемент $Справочник.Товары]
FROM  $Справочник.Товары AS Товары
inner join $Справочник.Соответствия AS Соответствия Соответствия.id = $товары.Альтернатива
WHERE 
LOWER(Соответствия.DESCR) Like "+Шаблон("'%[НРег(Стр)]%'")
  
Наверх
IP записан
 
zeek
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 16. Апреля 2008
Re: Объединение двух запросов
Ответ #2 - 17. Апреля 2008 :: 13:09
Печать  
Ты наверно хотел сказать так
|SELECT Товары.ID as [Элемент $Справочник.Товары]
                 |FROM
                 |      $Справочник.Товары as Товары
                 |      INNER JOIN $Справочник.Соответствия AS Соответствия ON $Соответствия.Соответствие = $Товары.Цвета1
                 |WHERE
                 |      LOWER(Соответствия.DESCR) Like "+Шаблон("'%[НРег(Стр)]%'")
но он не отрабатывает, выдает пустую ТЗ, а по отдельности все нормально.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Объединение двух запросов
Ответ #3 - 17. Апреля 2008 :: 13:12
Печать  
А у тебя точно реквизит справочника "Товары" имеет тип "Справочник.Соответствия " ?
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Объединение двух запросов
Ответ #4 - 17. Апреля 2008 :: 13:18
Печать  
И ещё: делай вместо "LOWER(DESCR)" - "UPPER(DESCR)" (соответственно вместо НРЕГ - ВРег)
Будешь попадвть в индекс и летать
  
Наверх
 
IP записан
 
zeek
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 16. Апреля 2008
Re: Объединение двух запросов
Ответ #5 - 17. Апреля 2008 :: 13:22
Печать  
JohnyDeath писал(а) 17. Апреля 2008 :: 13:12:
А у тебя точно реквизит справочника "Товары" имеет тип "Справочник.Соответствия " ?

Нет, ты не понял. У справочник "Товары" есть реквизит "Цвета1" и у справочника "Соответствия" есть реквизит "Соответствие" т.е.  Справочник.Цвета1=Соответствия.Соответствие
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Объединение двух запросов
Ответ #6 - 17. Апреля 2008 :: 13:24
Печать  
Ну да, тормознул не много. ТОгда спрошу по-другому: они одинакового вида?
  
Наверх
 
IP записан
 
zeek
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 16. Апреля 2008
Re: Объединение двух запросов
Ответ #7 - 17. Апреля 2008 :: 13:25
Печать  
Однозначно
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Объединение двух запросов
Ответ #8 - 17. Апреля 2008 :: 13:30
Печать  
Я чего-то не пойму. Ты в 0-м посте во 2-м запросе написал:
Код
Выбрать все
WHERE ($Товары.Альтернатива = :Соотв) 


а теперь у тебя:
Код
Выбрать все
$Соответствия.Соответствие = $Товары.Цвета1 


?
что ты передавал в ":Соотв"?
  
Наверх
 
IP записан
 
zeek
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 16. Апреля 2008
Re: Объединение двух запросов
Ответ #9 - 17. Апреля 2008 :: 13:37
Печать  
Ты не обращай внимание на разные имена реквизитов в (0), это просто пример был. А в Соотв я передавл как раз значение Соответствия.Соответствие
  
Наверх
 
IP записан
 
zeek
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 16. Апреля 2008
Re: Объединение двух запросов
Ответ #10 - 18. Апреля 2008 :: 10:31
Печать  
Кто может ответить почему этот запрос находит элемент

|SELECT $Соответствия.Соответствие [Элемент $Справочник]
|FROM $Справочник.Соответствия AS Соответствия
|WHERE
|UPPER(Соответствия.DESCR) Like "+Шаблон("'%[ВРег(Стр)]%'")+"

а в таком варианте этот же код ненаходит

|SELECT Товары.ID as [Элемент $Справочник.Товары]
|FROM
|      $Справочник.Товары as Товары
|WHERE
|      $Товары.Цвета1 IN (SELECT $Соответствия.Соответствие [Элемент $Справочник]
|                  FROM $Справочник.Соответствия AS Соответствия
|            WHERE
|                  UPPER(Соответствия.DESCR) Like "+Шаблон("'%[ВРег(Стр)]%'")+")
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Объединение двух запросов
Ответ #11 - 18. Апреля 2008 :: 10:33
Печать  
попробуй убрать типизацию в
Цитата:
SELECT $Соответствия.Соответствие [Элемент $Справочник]
  
Наверх
 
IP записан
 
zeek
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 16. Апреля 2008
Re: Объединение двух запросов
Ответ #12 - 18. Апреля 2008 :: 10:37
Печать  
пробовал, тот же результат
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Объединение двух запросов
Ответ #13 - 18. Апреля 2008 :: 10:41
Печать  
Ну всё-таки расскажи про Тип.Вид вот этого: "Товары.Цвета1" и "Соответствия.Соответствие"
  
Наверх
 
IP записан
 
zeek
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 16. Апреля 2008
Re: Объединение двух запросов
Ответ #14 - 18. Апреля 2008 :: 10:46
Печать  
Есть справочник "Товары" у него есть реквизит "Цвета1" тип "Справочник.Цвета"
и есть справочник "Соотвествия" с реквизитом "Соответствие" тип "Справочник" так вот в данный момент реквизиты "Цвета1" и "Соответствие" равны значению из "Справочник.Цвета"
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Объединение двух запросов
Ответ #15 - 18. Апреля 2008 :: 10:55
Печать  
zeek писал(а) 18. Апреля 2008 :: 10:46:
реквизит "Цвета1" тип "Справочник.Цвета"
и есть справочник "Соотвествия" с реквизитом "Соответствие" тип "Справочник"

Ну вот и нашёлся ответ!  Подмигивание
Попробуй так во вложенном запросе:
Код
Выбрать все
SELECT ($ВидСправочника.Цвета + $Соответствия.Соответствие) 

  
Наверх
 
IP записан
 
zeek
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 16. Апреля 2008
Re: Объединение двух запросов
Ответ #16 - 18. Апреля 2008 :: 11:05
Печать  
Если ты имел ввиду так

|SELECT Товары.ID as [Элемент $Справочник.Товары]
|FROM
|      $Справочник.Товары as Товары
|WHERE
|      $Товары.Цвета1 IN (SELECT ($ВидСправочника.Цвета + $Соответствия.Соответствие)
|      FROM $Справочник.Соответствия as Соответствия
|      WHERE
|            UPPER(Соответствия.DESCR) Like "+Шаблон("'%[ВРег(Стр)]%'")+")"

то результат State 22018, native 245, message [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value ' 134     1   ' to a column of data type int.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Объединение двух запросов
Ответ #17 - 18. Апреля 2008 :: 11:09
Печать  
А $ВидСправочника36 ?
  
Наверх
 
IP записан
 
zeek
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 16. Апреля 2008
Re: Объединение двух запросов
Ответ #18 - 18. Апреля 2008 :: 11:11
Печать  
без ошибок но результат тот же  Печаль
  
Наверх
 
IP записан
 
zeek
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 16. Апреля 2008
Re: Объединение двух запросов
Ответ #19 - 18. Апреля 2008 :: 12:04
Печать  
что вариантов больше нет?
  
Наверх
 
IP записан
 
zeek
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 16. Апреля 2008
Re: Объединение двух запросов
Ответ #20 - 18. Апреля 2008 :: 12:50
Печать  
Может я вообще не в ту сторону пошел. Мне надо по наименованиям нескольких справочников получать список реквизитов и по этому списку искать товар соответствующий этим реквизитам. При попытке перечислить несколько справочников во вложеном запросе выдал ошибку "Only one expression can be specified in the select list when the subquery is not introduced with EXISTS"
  
Наверх
 
IP записан
 
zeek
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 16. Апреля 2008
Re: Объединение двух запросов
Ответ #21 - 18. Апреля 2008 :: 13:15
Печать  
Получается что-то вроде этого
Код
Выбрать все
			|SELECT Товары.ID as [Элемент $Справочник.Товары]
			|FROM
			|	$Справочник.Товары as Товары
			|	LEFT JOIN $Справочник.Цвета AS Цвета ON Цвета.ID = $Товары.Цвета1 OR Цвета.ID = $Товары.Цвета2
			|	LEFT JOIN $Справочник.ГруппыТканей as ГруппыТканей ON ГруппыТканей.ID = $Товары.ГруппаТканей1 OR ГруппыТканей.ID = $Товары.ГруппаТканей2
			|		OR ГруппыТканей.ID = $Товары.ГруппаТканей3
			|	LEFT JOIN $Справочник.Направление as Направление ON Направление.ID = $Товары.Направление1 OR Направление.ID = $Товары.Направление2
			|		OR Направление.ID = $Товары.Направление3
			|	LEFT JOIN $Справочник.ХарактеристикиТканей as ХарактеристикиТканей ON ХарактеристикиТканей.ID = $Товары.Характеристика1 OR ХарактеристикиТканей.ID = $Товары.Характеристика2
			|		OR ХарактеристикиТканей.ID = $Товары.Характеристика3 OR ХарактеристикиТканей.ID = $Товары.Характеристика4 OR ХарактеристикиТканей.ID = $Товары.Характеристика5
			|		OR ХарактеристикиТканей.ID = $Товары.Характеристика6 OR ХарактеристикиТканей.ID = $Товары.Характеристика7
			|WHERE
			|	UPPER(Цвета.DESCR) Like "+Шаблон("'%[ВРег(Стр)]%'")+" OR
			|	UPPER(ГруппыТканей.DESCR) Like "+Шаблон("'%[ВРег(Стр)]%'")+" OR
			|	UPPER(Направление.DESCR) Like "+Шаблон("'%[ВРег(Стр)]%'")+" OR
			|	UPPER(ХарактеристикиТканей.DESCR) Like "+Шаблон("'%[ВРег(Стр)]%'")+"";
 


если поиск идет по одному слову то все ОК, но если их больше одного то находит только по первому, хотя по отдельности находит.
  
Наверх
 
IP записан
 
zeek
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 16. Апреля 2008
Re: Объединение двух запросов
Ответ #22 - 18. Апреля 2008 :: 13:27
Печать  
Проверил пару раз все-таки вышеуказанный вариант рабочий осталось каким-то боком добавить еще справочник "Соостевтствия"  тудаже. Соль вся в том что в этом справочнике может находится любой элемент из уже перечисленных в запросе справочников.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать