在sql中使用来自多个表的外键

时间:2013-05-25 05:01:48

标签: sql-server-2008 foreign-keys left-join

可能重复:

  

Setting a foreign key to more than one table

     

OR

     

has_one with more than one possible foreign key column

我的sql数据库中有一个表( MainTable ),其中有5个字段。其中一个字段( FID )是同一个其他5个表的外键其他字段( TypeID )包含一个ID,表明 FID 中的键属于该5个表中的哪个表。例如,如果 FID对于 MainTable 中的记录, = 1000且 TypeID = 1,这意味着1000是表1中的主键。

现在我想将这些表连接到一个新表,所以我创建了一个视图,并在这5个表和 MainTable 之间使用了LEFT OUTER JOIN命令:

    Select * From 
      (Select * From 
        (Select * From 
           (Select * From 
             (Select * From MainTable LEFT OUTER JOIN Table1 ON MainTable.FID=Table1.ID AND  MainTable.TypeID=1)AS Temp1 
LEFT OUTER JOIN Table2 ON Temp1.FID=Table2.ID AND Temp1.TypeID=2)AS Temp2 
  LEFT OUTER JOIN Table3 ON Temp2.FID=Table3.ID AND Temp2.TypeID=3)AS Temp3 
    LEFT OUTER JOIN Table4 ON Temp3.FID=Table4.ID AND Temp3.TypeID=4)AS Temp4 
       LEFT OUTER JOIN Table5 ON Temp4.FID=Table5.ID AND Temp4.TypeID=5

1)上述查询是否是此目标的最佳查询?

2)有没有办法在特殊列中合并结果表的某些列?我的意思是如果结果是这样的:

field1       field2      field3      field4
-------------------------------------------
value1        NULL        NULL        NULL
 NULL        value2       NULL        NULL
 NULL         NULL       value3       NULL
 NULL         NULL        NULL       value4

将其转换为以下内容:

  new_field
------------
   value1
   value2
   value3
   value4

1 个答案:

答案 0 :(得分:0)

我的问题在this url由CHill回答。