2个表之间有2种不同的关系

时间:2012-08-16 22:18:56

标签: sql sql-server

我有以下情况: 客户可以选择一个当前的地址,有一堆地址。

  

ADDRESS(ID,CLIENT_ID,...)

     

客户(ID,CURRENT_ADDRESS_ID,...)

一对多有明显的关系

  

ADDRESS [CLIENT_ID] GT; ---> CLIENT [ID]

但还有另一个一对一。我不知道这是否正确。

  

客户端[CURRENT_ADDRESS_ID] LT; --->地址[ID]

这应该由SQL关系完成,还是稍后在代码中完成? (示例SQL代码将不胜感激)

3 个答案:

答案 0 :(得分:0)

客户端(ID,...)

ADDRESS(ID,...)

CLIENT_ADDRESS(CLIENT_ID,ADDRESS_ID,IS_CURRENT_ADDRESS)

答案 1 :(得分:0)

当您想要创建第三个表来链接客户端和地址时,就会出现这种情况。它看起来像这样:

地址(地址ID)

ClientAddress(AddressID,ClientID)

客户端(ClientID)

答案 2 :(得分:0)

如果客户必须选择其中一个地址将其设置为当前,则不需要第二个关系,因此您可以执行此类操作

SELECT Client.ID ClientID, Address.ID AddressID, 
CASE WHEN Client.Current_Address_Id =  Address.ID THEN 'Current Address' ELSE '' END Current
FROM Client LEFT JOIN Address ON Client.ID = Address.Client_ID

你会得到像

这样的东西
ClientID | AddressID | Current
1          20          'Current Address'
1          35          
1          15          
2          18          'Current Address'
.
.
.

如果添加第二个条件

SELECT Client.ID ClientID, Address.ID AddressID, 
CASE WHEN Client.Current_Address_Id =  Address.ID THEN 'Current Address' ELSE '' END Current
FROM Client LEFT JOIN Address ON Client.ID = Address.Client_ID AND Client.Current-Address_ID = Addres.ID 

你会得到像

这样的东西
ClientID | AddressID | Current
1          20          'Current Address'
2          18          'Current Address'
.
.
.

希望它有所帮助...