Как получить два разных значения для одного и того же ссылочного идентификатора в одной строке

62
8

У меня две таблицы: 1) Товар 2) Товар

Таблица продуктов:

PId  Name   value1  value2
1 abc 1233 4567
2 xyz 9099 9099

Таблица предметов:

itemId  itemname  item_start   item_end
1 idc 1 2

item_start & item_end - ссылка на таблицу продуктов в столбце PId.

Теперь, когда я пишу ниже запрос:

select * from item left join product on item_start = PId and item_end = PId

тогда он дает только данные value1, но я хочу такие данные, как:

itemId  itemname  item_start  item_start_value1 item_start_value2  item_end    item_end_value1    item_end_value2
1 idc 1 1233 4567 2 9099 9099

Как я могу получить вышеуказанный вывод?

спросил(а) 2019-04-04T12:38:00+03:00 11 месяцев назад
1
Решение
76

Поскольку у вас есть 2 FK в таблице товаров, вам нужно 2 соединения в таблице товаров.

SELECT I.itemId, I.itemname, I.item_start, P1.value1 as item_start_value1, P1.value2 as item_start_value2, I.item_end, P2.value1 as item_end_value1, P2.value2 as item_end_value2
FROM item
LEFT JOIN product P1 ON item_start = PId
LEFT JOIN product P2 ON item_end = PId

ответил(а) 2019-04-04T12:43:00+03:00 11 месяцев назад
52

Присоединяйтесь к таблице продуктов дважды.

SELECT item.*
, productStart.Value1 AS product_start_value1
, productStart.Value2 AS product_start_value2
, productEnd.Value1 AS product_end_value1
, productEnd.Value2 AS product_end_value2
FROM item
LEFT OUTER
JOIN product productStart
ON productStart.PId = item.item_start
LEFT OUTER
JOIN product productEnd
ON productEnd.PId = item.item_end

ответил(а) 2019-04-04T12:43:00+03:00 11 месяцев назад
36

SELECT item.itemId
, item.itemname
, item.item_start
, productStart.Value1 AS item_start_value1
, productStart.Value2 AS item_start_value2
, item.item_end
, productEnd.Value1 AS item_end_value1
, productEnd.Value2 AS item_end_value2
FROM item
Inner JOIN product productStart ON productStart.PId = item.item_start
Inner JOIN product productEnd ON productEnd.PId = item.item_end

ответил(а) 2019-04-04T13:21:00+03:00 11 месяцев назад
36

Пример того, что можно сделать:

select * from #Item i inner join #Product p on i.item_Start = p.Pid
inner join #Product p2 on i.Item_end = p2.PId

ответил(а) 2019-04-04T12:47:00+03:00 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема