|
Несколько обращений к одной из таблиц запроса в запросе | ☑ | ||
---|---|---|---|---|
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
|
|
|||
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), только с внешним соединением, а не с внутренним. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |