SQL Server:从第一个表链接到第二个表的主键的多个外键

时间:2014-10-16 06:04:27

标签: sql sql-server

我有两个表,itemrequest_tableitem_table。四列itemrequest_tableitem1, item2, item3, item4)与item_no的{​​{1}}相关联。

我试图编写一个查询来显示item1,item2,item3,item4列下item_nos的项目名称。

但是如何显示项目名称呢?是否可以查询?

我的桌子:

enter image description here

2 个答案:

答案 0 :(得分: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_tableitem_table之间的关系,如果需要,允许任意数量的连接(常规的,正常的m:n关系)

答案 1 :(得分: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

编辑:
根据评论,这些项目是可选的,因此应使用left join代替join