Имя: Пароль:
1C
1С v8
Несколько обращений к одной из таблиц запроса в запросе
,
0 RommBoss
 
05.03.15
14:59
Ситуация банальная, но пока не решаемая

Есть Таблица1 с полями:
   - имя
   - код1
   - код2
   - код3    


и таблица2 с полями
   - ИД
   - Наименование

Имя и нименование  - строки
Код1, код2, код3 - ИД из таблицы 2

Как в ОДНОМ запросе в результат выдать для каждого "ИМЯ"

вместо "код1...3" соответствующие "наименования" из таблицы 2?
1 ДенисЧ
 
05.03.15
15:01
выбрать т1.код, т2.Наименование
из Таблица1 как т1 ВНУТРЕННЕЕ СОЕДИЕНИЕ Таблица2 КАК т2
по т1.код=т2.ИД
2 Посмотрим
 
05.03.15
15:01
Объединение для тебя это один запрос?
3 Ёпрст
 
05.03.15
15:02
left join + case в select
4 Посмотрим
 
05.03.15
15:04
(1) т1.код эт откуда у тебя
5 Ёпрст
 
05.03.15
15:04
(1)чей-то я думал, что у автора в 1 записи несколько полей код..кодn
6 MSOliver
 
05.03.15
15:05
(0) задачу не смог понять...
7 Посмотрим
 
05.03.15
15:07
выбрать
ВЫБОР КОГДА т1.код1 = т2.ИД ТОГДА т1.Код1
ИНАЧЕЕСЛИ  т1.код2 = т2.ИД ТОГДА т1.Код2
ИНАЧЕЕСЛИ  т1.код3 = т2.ИД ТОГДА т1.Код3 ,
т2.Наименование
из Таблица2 как т2 ЛЕВОЕ СОЕДИЕНИЕ Таблица2 КАК т2
по  т1.код1=т2.ИД ИЛИ т1.код2=т2.ИД ИЛИ т1.код3=т2.ИД
8 Посмотрим
 
05.03.15
15:08
*ЛЕВОЕ СОЕДИЕНИЕ Таблица1 КАК т1
9 Ёпрст
 
05.03.15
15:11
(7) махер же..
10 Ёпрст
 
05.03.15
15:12
ему надо получить табличку вида

т1.код1, т2.ИД1
т1.код2, т2.ИД2
т1.код3, т2.ИД3
11 Ёпрст
 
05.03.15
15:12
точнее
т1.код1, т2.наименование1
т1.код2, т2.Наименование2
т1.код3, т2.Наименование3
12 RommBoss
 
05.03.15
15:15
попытаюсь расписать подробней с данными
например есть таблица с товаром у которой 4 поля
Имя               - строка- Мыло
Единица хранения1 - число - 1234
Единица хранения2 - число - 1234
Единица хранения3 - число - 4567
Единица хранения4 - число - 8765


Коды (числа) - это коды из таблицы "Единицы хранения"

Имя - строка - "шт"
Код - число - 1234


Надо получить

Мыло - шт - упак - ящик - коробка

и так по всем элементам таблицы товаров
13 adron
 
05.03.15
15:18
(12) а я 5-ть полей насчитал в таблице с товаром
14 RommBoss
 
05.03.15
15:19
сорри, это не важно, 3 - 4 - 5...
15 adron
 
05.03.15
15:20
4 левых соединений
16 Ёпрст
 
05.03.15
15:21
в обычном sql запросе сделал бы коррелированный подзапрос в селекте и усё, а тут.. только через жпо
17 D_E_S_131
 
05.03.15
15:22
А единиц хранения всегда 4?
18 adron
 
05.03.15
15:23
Что-то типа

Выбрать
     Т.Имя,
     Т1.Имя,
     ...
     Т4.Имя
ИЗ
     ТТОВАРА КАК Т
ЛЕВОЕ СОЕДИНЕНИЕ ТЕДИНИЦ
     по Т.Единица хранения1 = Т1.КОД
     ...
ЛЕВОЕ СОЕДИНЕНИЕ ТЕДИНИЦ
     по Т.Единица хранения1 = Т4.КОД

не?
19 RommBoss
 
05.03.15
15:23
т.е. создать 4 вложенных запроса в каждый из которых поместить запрос в таблицу 2  - это полная "жпо" (С)
20 RommBoss
 
05.03.15
15:23
(18) нет
21 RommBoss
 
05.03.15
15:24
(17) да
22 D_E_S_131
 
05.03.15
15:24
(19) А ты по сути хочешь строки превратить в колонки или чего?
23 RommBoss
 
05.03.15
15:25
коды в имена из второй таблица, названия едениц измерения
24 D_E_S_131
 
05.03.15
15:25
Ну обозначь тогда таблицу 5 раз и выбирай по полю из каждой.
25 D_E_S_131
 
05.03.15
15:28

ВЫБРАТЬ
    "Товар1" КАК Имя,
    "ЕХ1" КАК Единица1,
    "ЕХ2" КАК Единица2,
    "ЕХ3" КАК Единица3,
    "ЕХ4" КАК Единица4
ПОМЕСТИТЬ ВТ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.Имя,
    ВТ1.Единица1,
    ВТ2.Единица2,
    ВТ3.Единица3,
    ВТ4.Единица4
ИЗ
    ВТ КАК ВТ,
    ВТ КАК ВТ1,
    ВТ КАК ВТ2,
    ВТ КАК ВТ3,
    ВТ КАК ВТ4
26 gr0ck
 
05.03.15
15:32
Сделай 3 селекта два объединения и не парься) Или первую табличку приведи к более кошерному виду и одной выборкой дальше соедини
27 mikecool
 
05.03.15
15:36
в скд все можно в одно поле засунуть
28 Ёпрст
 
05.03.15
15:40
Тип того, разве что:
ВЫБРАТЬ
    1 КАК Поле1,
    2 КАК Поле2,
    3 КАК Поле3
ПОМЕСТИТЬ Табличка1
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    1 КАК ИД,
    "Вася" КАК Наименование
ПОМЕСТИТЬ Табличка2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    2,
    "Федя"

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    3,
    "Маша"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Табличка.Поле1,
    Табличка.Поле2,
    Табличка.Поле3,
    Табличка1.Наименование КАК Наименование1,
    Табличка2.Наименование КАК Наименование2,
    Табличка3.Наименование КАК Наименование3
Поместить ОбщаяТабличка    
ИЗ
    Табличка1 КАК Табличка,
    Табличка2 КАК Табличка1,
    Табличка2 КАК Табличка2,
    Табличка2 КАК Табличка3
Где Табличка.Поле1 = Табличка1.ИД
    И Табличка.Поле2 = Табличка2.ИД
    И Табличка.Поле3 = Табличка3.ИД
29 Ёпрст
 
05.03.15
15:42
даже так
ВЫБРАТЬ
    1 КАК Поле1,
    2 КАК Поле2,
    3 КАК Поле3
ПОМЕСТИТЬ Табличка1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    2,
    3,
    1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    1,
    1,
    1
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    1 КАК ИД,
    "Вася" КАК Наименование
ПОМЕСТИТЬ Табличка2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    2,
    "Федя"

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    3,
    "Маша"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Табличка.Поле1,
    Табличка.Поле2,
    Табличка.Поле3,
    Табличка1.Наименование КАК Наименование1,
    Табличка2.Наименование КАК Наименование2,
    Табличка3.Наименование КАК Наименование3
ИЗ
    Табличка1 КАК Табличка,
    Табличка2 КАК Табличка1,
    Табличка2 КАК Табличка2,
    Табличка2 КАК Табличка3
ГДЕ
    Табличка.Поле1 = Табличка1.ИД
    И Табличка.Поле2 = Табличка2.ИД
    И Табличка.Поле3 = Табличка3.ИД

результат:
Поле1    Поле2    Поле3    Наименование1    Наименование2    Наименование3
1    1    1    Вася    Вася    Вася
2    3    1    Федя    Маша    Вася
1    2    3    Вася    Федя    Маша
30 RommBoss
 
05.03.15
16:03
попробую, спасибо
31 Jaap Vduul
 
05.03.15
16:18
(30)
То же самое предлагали в (18), только с внешним соединением, а не с внутренним.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший