Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Проблема с соединением INNER JOIN (число прочтений - 5529 )
FIXER
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 17. Марта 2014
Проблема с соединением INNER JOIN
23. Июля 2014 :: 09:05
Печать  
Здравствуйте! Помогите пожалуйста разобраться! Суть проблемы такая: мне нужно выбрать все товары из приходных документов (ПриходнаяКредит) за период и к получившейся таблице прицепить таблицу брендов от этих товаров (бренд это справочник, реквизит справочника товаров). Не могу понять что именно у меня не так
     ТекстЗапроса = "
     |SELECT
     |    $ДокС.Товар as [Товар $Справочник.Товары],
     |    $Бренд.ID as [БрендТов $Справочник.Бренды],
     |    SUM($ДокС.Сумма) as Сумма
     |FROM
     |    $ДокументСтроки.ПриходнаяКредит as ДокС
     |INNER JOIN
     |    $Документ.ПриходнаяКредит as Док ON Док.IDDoc = ДокС.IDDoc AND
     |                                  $Док.ПризнакНакладной = :Закупка
     |INNER JOIN
     |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc AND
     |                       Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
     |                       Жур.Closed & 1 = 1
     |INNER JOIN
     |       $Справочник.Бренды as Бренд ON $Бренд.ID = $БрендТов.ID
     |GROUP BY
     |    $ДокС.Товар";
Заранее большое спасибо!
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Проблема с соединением INNER JOIN
Ответ #1 - 23. Июля 2014 :: 09:18
Печать  
Муть тут какая-то написана.
Где соединение товаров из таблицы со со спр. Товары?
И кто такой  БрендТов, я не знаю.  А уж SQL тем более ....
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Проблема с соединением INNER JOIN
Ответ #2 - 23. Июля 2014 :: 09:19
Печать  
телепатирую: БрендТов - реквизит справочника товаров
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Проблема с соединением INNER JOIN
Ответ #3 - 23. Июля 2014 :: 09:21
Печать  
нужно написать так
|INNER JOIN $Справочник.Товары as Товары ON Товары.ID = $ДокС.Товар
|INNER JOIN $Справочник.Бренды as Бренд ON $Бренд.ID = $Товары.БрендТов

ну и (nolock) везде
  

1&&2&&3
Наверх
 
IP записан
 
FIXER
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 17. Марта 2014
Re: Проблема с соединением INNER JOIN
Ответ #4 - 23. Июля 2014 :: 09:24
Печать  
trad писал(а) 23. Июля 2014 :: 09:19:
телепатирую: БрендТов - реквизит справочника товаров

Тоесть нужно сначала соединить начальную таблицу где 2 колонки Товар и Сумма, а таблицей справочника товаров, а потом таблицу справочника товаров соединять с таблицей брендов я правильно понял?
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Проблема с соединением INNER JOIN
Ответ #5 - 23. Июля 2014 :: 09:35
Печать  
FIXER писал(а) 23. Июля 2014 :: 09:24:
trad писал(а) 23. Июля 2014 :: 09:19:
телепатирую: БрендТов - реквизит справочника товаров

Тоесть нужно сначала соединить начальную таблицу где 2 колонки Товар и Сумма, а таблицей справочника товаров, а потом таблицу справочника товаров соединять с таблицей брендов я правильно понял?


Не нужен второй джойн.
Достаточно одного с Товарами.
Из него получишь $Товары.БрендТов
  
Наверх
 
IP записан
 
FIXER
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 17. Марта 2014
Re: Проблема с соединением INNER JOIN
Ответ #6 - 23. Июля 2014 :: 10:43
Печать  
Цитата:
FIXER писал(а) 23. Июля 2014 :: 09:24:
trad писал(а) 23. Июля 2014 :: 09:19:
телепатирую: БрендТов - реквизит справочника товаров

Тоесть нужно сначала соединить начальную таблицу где 2 колонки Товар и Сумма, а таблицей справочника товаров, а потом таблицу справочника товаров соединять с таблицей брендов я правильно понял?


Не нужен второй джойн.
Достаточно одного с Товарами.
Из него получишь $Товары.БрендТов



     ТекстЗапроса = "
     |SELECT
     |    $ДокС.Товар as [Товар $Справочник.Товары],
     |    $Товары.Бренд as [БрендТов $Справочник.Бренды],
     |    SUM($ДокС.Сумма) as Сумма
     |FROM
     |    $ДокументСтроки.ПриходнаяКредит as ДокС
     |INNER JOIN
     |    $Документ.ПриходнаяКредит as Док ON Док.IDDoc = ДокС.IDDoc AND
     |                                  $Док.ПризнакНакладной = :Закупка
     |INNER JOIN
     |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc AND
     |                       Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
     |                       Жур.Closed & 1 = 1
     |INNER JOIN $Справочник.Товары as Товары ON Товары.ID = $ДокС.Товар";

Выдаёт вот такую вот хрень State 42000, native 8118, message [Microsoft][ODBC SQL Server Driver][SQL Server]Column ДокС.SP448' is invalid in the select list because it is not contained in an ag
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Проблема с соединением INNER JOIN
Ответ #7 - 23. Июля 2014 :: 10:59
Печать  
Цитата:
Не нужен второй джойн.
Достаточно одного с Товарами.
Из него получишь $Товары.БрендТов

формально, это будет не одно и тоже как при использовании inner join
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Проблема с соединением INNER JOIN
Ответ #8 - 23. Июля 2014 :: 11:01
Печать  
FIXER писал(а) 23. Июля 2014 :: 10:43:
Выдаёт вот такую вот хрень State 42000, native 8118, message [Microsoft][ODBC SQL Server Driver][SQL Server]Column ДокС.SP448' is invalid in the select list because it is not contained in an ag

     |SELECT
     |    $ДокС.Товар as [Товар $Справочник.Товары],
     |    MAX($Товары.Бренд) as [БрендТов $Справочник.Бренды],
     |    SUM($ДокС.Сумма) as Сумма
     |...
     |group by $ДокС.Товар
  

1&&2&&3
Наверх
 
IP записан
 
FIXER
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 17. Марта 2014
Re: Проблема с соединением INNER JOIN
Ответ #9 - 23. Июля 2014 :: 11:22
Печать  
Спасибо заработало! Пошёл дальше учить sql  Класс
  
Наверх
 
IP записан
 
FIXER
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 17. Марта 2014
Re: Проблема с соединением INNER JOIN
Ответ #10 - 23. Июля 2014 :: 12:11
Печать  
trad писал(а) 23. Июля 2014 :: 11:01:
FIXER писал(а) 23. Июля 2014 :: 10:43:
Выдаёт вот такую вот хрень State 42000, native 8118, message [Microsoft][ODBC SQL Server Driver][SQL Server]Column ДокС.SP448' is invalid in the select list because it is not contained in an ag

    |SELECT
    |    $ДокС.Товар as [Товар $Справочник.Товары],
    |    MAX($Товары.Бренд) as [БрендТов $Справочник.Бренды],
    |    SUM($ДокС.Сумма) as Сумма
    |...
    |group by $ДокС.Товар


Возник ещё вопрос, теперь я хочу допустим к текущей таблице добавить ещё одну колонку СотрудникЗакупа, это реквизит справочника Бренды типа Справочник.Сотрудники. Пытаюсь сделать по аналогии но выдаёт ошибку
Meta name parser error: неизвестное метаимя или алиас "$Бренды"
ТекстЗапроса = "
     |SELECT
     |    $ДокС.Товар as [Товар $Справочник.Товары],
     |    MAX($Товары.Бренд) as [БрендТов $Справочник.Бренды],
     |    MAX($Бренды.СотрудникЗакупа) as [СотрЗакупа $Справочник.Сотрудники],
     |    SUM($ДокС.Сумма) as Сумма
     |FROM
     |    $ДокументСтроки.ПриходнаяКредит as ДокС
     |INNER JOIN
     |    $Документ.ПриходнаяКредит as Док ON Док.IDDoc = ДокС.IDDoc AND
     |                                  $Док.ПризнакНакладной = :Закупка
     |INNER JOIN
     |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc AND
     |                       Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
     |                       Жур.Closed & 1 = 1
     |INNER JOIN
     |        $Справочник.Товары as Товары ON Товары.ID = $ДокС.Товар
     |INNER JOIN
     |        $Cправочник.Бренды as Бренды ON $Бренды.ID = $Товары.Бренд     ///ЗДЕСЬ ПРОБОВАЛ И С $ И БЕЗ $
     |GROUP BY
     |        $ДокС.Товар";
Подскажите пожалуйста что я теперь не так делаю
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Проблема с соединением INNER JOIN
Ответ #11 - 23. Июля 2014 :: 12:29
Печать  
ON Бренды.ID = $Товары.Бренд
  
Наверх
 
IP записан
 
FIXER
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 17. Марта 2014
Re: Проблема с соединением INNER JOIN
Ответ #12 - 23. Июля 2014 :: 12:35
Печать  
Eprst писал(а) 23. Июля 2014 :: 12:29:
ON Бренды.ID = $Товары.Бренд

Я же написал что и с $ и без пробовал, ошибка в обоих случаях остается таже самая
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Проблема с соединением INNER JOIN
Ответ #13 - 23. Июля 2014 :: 12:37
Печать  
какая ошибка то хоть ?

+ покажи, что возвращает Запрос.Отладка(1)

  
Наверх
 
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: Проблема с соединением INNER JOIN
Ответ #14 - 23. Июля 2014 :: 12:43
Печать  
Код
Выбрать все
ТекстЗапроса = "Set NoCount On
|SELECT
| $ДокС.Товар as [Товар $Справочник.Товары]
|, MAX($Товары.Бренд) as [БрендТов $Справочник.Бренды]
|, MAX($Бренды.СотрудникЗакупа) as [СотрЗакупа $Справочник.Сотрудники]
|, SUM($ДокС.Сумма) as Сумма
|FROM
|  _1SJourn as Жур WITH (NoLock)
|  INNER JOIN $Документ.ПриходнаяКредит as Док WITH (NoLock) ON Док.IDDoc = Жур.IDDoc AND $Док.ПризнакНакладной = :Закупка
|  INNER JOIN $ДокументСтроки.ПриходнаяКредит as ДокС WITH (NoLock) ON ДокС.IDDoc = Док.IDDoc
|  INNER JOIN $Справочник.Товары as Товары WITH (NoLock) ON Товары.ID = $ДокС.Товар
|  INNER JOIN $Cправочник.Бренды as Бренды WITH (NoLock) ON Бренды.ID = $Товары.Бренд
|WHERE  
|  Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND Жур.Closed & 1 = 1
|GROUP BY
|  $ДокС.Товар";
 

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать