2012-08-16 87 views
0

我有以下情况: 有一串地址,女巫客户可以选择当前的地址。2个表格之间的2种不同关系

ADDRESS(ID,CLIENT_ID,...)

CLIENT(ID,CURRENT_ADDRESS_ID,...)

有一个明显的关系,一个一对多

ADDRESS [CLIENT_ID]> --->客户端[ID]

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

CLIENT [CURRENT_ADDRESS_ID] < ---> ADDRESS [ID]

如果有这样的由SQL关系进行,或者在后面的代码? (样品SQL代码将理解)

+0

的地址可以连接到许多客户?和一个客户到很多地址'? – 2012-08-16 22:30:20

+0

'ADDRESS [CLIENT_ID]> ---> CLIENT [ID]'不是一对多的,它是一对一的。这将声明给定的ADDRESS记录只能属于一个CLIENT。尽管客户端可能有许多指向它的ADDRESS记录。 – 2012-08-16 22:39:36

+0

@JeremyPridemore其实我的意思是一个客户有很多地址 – gisek 2012-08-16 23:02:33

回答

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' 
. 
. 
. 

希望它可以帮助...

0

CLIENT(ID,...)

ADDRESS(ID,...)

CLIENT_ADDRESS(CLIENT_ID,ADDRESS_ID,IS_CURRENT_ADDRESS)

0

这是当你想要考虑创建第三个表来链接客户端和地址的情况。它看起来是这样的:

地址(AddressID)

ClientAddress(AddressID,客户端ID)

客户端(客户端ID)