7

「Guest」、「Guest_Address」、「Acutal_Address」というタイトルの 3 つのテーブルがあります。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

なぜそのリンクテーブルを持っているのか聞いてもよろしいですか?ゲストは複数の住所を持つことができますか? その場合、2 つのテーブル間の関係を 1 対多ではなく 1 対 1 の関係にするのではなく、結合を からGUEST_ADDRESSGUEST基づくものに変更します。GUEST_IDADDRESS_NUMADDRESS_NUM

またACTUAL_ADDRESS、. GUEST_ADDRESS_ JOIN住所に関係なくゲストの詳細を返したい場合は、JOIN単にLEFT JOIN

于 2013-06-24T01:49:12.927 に答える
3

と の間には補助テーブルを介した多対多の関係がGuestあります。したがって、すべてを 1 つのセットに結合するには、次のようにします。ActualAddressGuestAddress

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 に答える