7

我有三个名为“Guest”、“Guest_Address”和“Acutal_Address”的表。Guest_Address 是 guest 和 acutal_address 之间的链接表。这就是我到目前为止所拥有的。

  SELECT GUEST_ADDRESS.ADDRESS_CODE,(GUEST_FNAME+' '+GUEST_LNAME) AS GUEST_NAMES
  FROM GUEST JOIN GUEST_ADDRESS 
  ON GUEST.ADDRESS_NUM = GUEST_ADDRESS.ADDRESS_NUM;

这只加入了Guest和Guest_address表,但我需要加入Guest和Acutal_Address。这是ERD。在此处输入图像描述

4

2 回答 2

13

您想要做的是对 actual_address 表进行额外的连接,如下所示:

  SELECT GUEST_ADDRESS.ADDRESS_CODE,(GUEST_FNAME+' '+GUEST_LNAME) AS GUEST_NAMES
  FROM GUEST 
  JOIN GUEST_ADDRESS ON GUEST.ADDRESS_NUM = GUEST_ADDRESS.ADDRESS_NUM
  JOIN ACTUAL_ADDRESS ON GUEST_ADDRESS.ADDRESS_CODE = ACTUAL_ADDRESS.ADDRESS_CODE

介意我问你为什么有那个链接表吗?客人可以有多个地址吗?如果是这种情况,我会将连接从更改GUEST_ADDRESSGUESTbased on GUEST_ID,而不是ADDRESS_NUM因为 usingADDRESS_NUM使两个表之间的关系成为一对一的关系,而不是一对多的关系

另外值得注意的是,ACTUAL_ADDRESS如果GUEST_ADDRESS由于JOIN. 如果您希望它返回客人详细信息而不管地址如何,您只需将其更改JOINLEFT JOIN

于 2013-06-24T01:49:12.927 回答
3

Guest辅助表之间和ActualAddress通过辅助表之间存在多对多的关系GuestAddress。因此,要将所有这些加入到一组中,请执行以下操作:

select * 
from Guest 
left join GuestAddress on GuestAddress.Guest_ID = Guest.Guest_ID 
left join ActualAddress on ActualAddress.AddressCode = GuestAddress.Address_Code

然后使用该where子句将集合过滤为较小的集合(子集),如果需要的话

于 2013-06-24T01:48:56.000 回答