例如,请查看下表:
tblItems:
ItemName IDData Type
-------------------------
i1 1 1
i2 2 1
i3 1 2
tblData1:
IDData Name
-------------------
1 Data11
2 Data12
tblData2:
IDData Name
-----------------
1 Data21
2 Data22
在类型1的tblItems
列中,IDData
来自tblData1
,如果类型为2 IDData
,则与tblIDData2相关联。
记录,然后用户可以将记录插入到项目表中,这样我就必须设置关系以确保这一点。
在这种情况下,如何在Sql Server
?
答案 0 :(得分:0)
我相信这样的事情符合你的需求:
SELECT
item.ItemName
,CASE item.Type
WHEN 1 THEN data1.Name
WHEN 2 THEN data2.Name
...add more?
END
FROM tblItems item
JOIN tblData1 data1 ON data1.IDData=item.IDData AND item.Type=1
JOIN tblData2 data2 ON data2.IDData=item.IDData AND item.Type=2
答案 1 :(得分:0)
我会修改你的结构以适应以下
tblItems:
ItemName IDData Type
-------------------------
i1 1 1
i2 2 1
i3 1 2
tblData
IDData Name Type
--------------------------------
1 Data11 1
2 Data12 1
1 Data11 2
2 Data12 2
现在,您的表tblItems
IDData
和Type
将成为外键。在新的tblData
中,您需要创建复合主键,以便在连接表时包含IDData
和Type
,而不需要具有奇怪的逻辑。
答案 2 :(得分:0)
我认为在这种情况下你无法定义关系..(在SQLSERVER中)......
这种关系需要在您的代码中。 (c#,java,其他)..
您可以使用sql使用case, when
但不是你想要的。
其他方法是为表创建另一个结构...
像这样:IDData ItemName ItemType (this itemtype would be 1 or 2 representing the Data)
希望它有所帮助。