2014-10-16 2 views
2

У меня есть две таблицы, itemrequest_table и item_table. Четыре столбца itemrequest_table (item1, item2, item3, item4) подключены к item_no от item_table.SQL Server: несколько внешних ключей из первой таблицы, связывающей первичный ключ второй таблицы

Я пытаюсь написать запрос для отображения имен элементов item_nos под столбцом item1, item2, item3, item4.

Но как я могу отобразить названия элементов? И можно ли это запросить?

Мои столы:

enter image description here

+2

У вас всегда есть четыре предмета в каждом запросе? Это выглядит подозрительно, как типичный случай плохого дизайна таблицы ... –

+0

Нет, сэр, item2-item4 являются необязательными, обнуляются. Хорошо, я исправлю свою таблицу. Спасибо за помощь :) – wakoko112

+1

[Что мне делать, когда кто-то отвечает на мой вопрос] (http://stackoverflow.com/help/someone-answers). Подсказка: это не изменить название вашего вопроса. –

ответ

0

Вам просто нужно сделать четыре соединения между двумя таблицами - по одному для каждого элемента:

SELECT 
    Item1 = i1.item_name,  
    Item2 = i2.item_name, 
    Item3 = i3.item_name, 
    Item4 = i4.item_name 
FROM 
    itemrequest_table ir 
INNER JOIN 
    item_table i1 ON ir.item1 = i1.item_no 
INNER JOIN 
    item_table i2 ON ir.item2 = i2.item_no 
INNER JOI 
    item_table i3 ON ir.item3 = i3.item_no 
INNER JOIN 
    item_table i4 ON ir.item4 = i4.item_no  

Но это действительно плохой дизайн - он пахнет нарушением первой нормальной формы (повторяющихся столбцов). То, что вы действительно должны сделать, это просто отношения между itemrequest_table и item_table, что позволяет для любого количества соединений, при необходимости (регулярный, нормальный т: п отношения)

+0

Хорошо, сэр, отметил. Я исправлю свой стол. Спасибо за помощь sir – wakoko112

0

Вы должны выполнить четыре присоединяется:

SELECT ir.request_no, 
      t1.item_name, t2.item_name, t3.item_name, t4.item_name 
FROM  itemrequest_table ir 
LEFT JOIN item_table t1 ON ir.item1 = t1.item_no 
LEFT JOIN item_table t2 ON ir.item2 = t2.item_no 
LEFT JOIN item_table t3 ON ir.item3 = t3.item_no 
LEFT JOIN item_table t4 ON ir.item4 = t4.item_no 

EDIT:
согласно комментариям, эти элементы не являются обязательными, поэтому left join следует использовать вместо join.

+0

спасибо за помощь сэр! – wakoko112

Смежные вопросы