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

У меня есть две таблицы: 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

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

Ответы [ 4 ]

1 голос
/ 04 апреля 2019

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

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
0 голосов
/ 04 апреля 2019
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
0 голосов
/ 04 апреля 2019

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

select * from #Item i inner join #Product p on i.item_Start = p.Pid
inner join #Product p2 on i.Item_end = p2.PId
0 голосов
/ 04 апреля 2019

Поскольку у вас есть 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...