• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:[初心者]A表の2つの値からB表を検索する。)

[初心者]A表の2つの値からB表を検索する

このQ&Aのポイント
  • 初心者でもわかるSQL文の書き方を教えてください。
  • A表のB_ID_1とB_ID_2の値を使用してB表のIDとnameを検索する方法を教えてください。
  • SQL文を勉強するにはどのサイトがおすすめですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1416)
回答No.2

推察ですが、A表のB_ID_1列と、B_ID_2列にB表の対応する名前を表示 するという前提でお話します。 B_ID_1、B_ID_2 は別々のフィールドなので、各々に結合させます。 SELECT A.ID, A.B_ID_1,X.name AS ID_1_name, A.B_ID_2,Y.name AS ID_2_name FROM (A表 A INNER JOIN B表 X ON A.B_ID_1=X.ID) INNER JOIN B表 Y ON A.B_ID_2=Y.ID (1)使うテーブルはA表、B表×2なので、それぞれを識別するために  別名(相関名という)を割り当てます。A表→A、B表(その1)→X  B表(その2)→Y (2)最初の列はA表のIDなので、A.IDとなります。(SELECTの直後) (3)次はA表のB_ID_1と、対応するB表(その1)のnameです。  列名として「ID_1_name」をAS句で割り当てます。(2行目) (4)最後はA表のB_ID_2と、対応するB表(その2)のnameです。  列名として「ID_2_name」をAS句で割り当てます。(3行目) (5)結合式はA表のB_ID_1とB表(その1)のID、及びA表のB_ID_2と  B表(その2)のIDです。(FROM句 以降の書き方を参照) 相関名.列名で、フィールドを特定しています。列名に同じものが 無ければ、修飾しなくても良いのですが、本例ではB表が2個ある ので、どちらの方のデータかを明示的に指示する必要があります。 尚、B_ID_1やB_ID_2の値がB表に無いデータは表示されません。 もし、B表に無くても表示させたい(nameの所はNullになる)場合は 予約語"INNER"を"LEFT"にしてください。

koipo
質問者

お礼

もとめていた情報を出すことができました。 本当にありがとうございました<_o_>

その他の回答 (1)

  • level2012
  • ベストアンサー率63% (12/19)
回答No.1

テーブルの設計を考え直した方がよろしいのではないでしょうか? そのような場合は、B_ID_1 と B_ID_2 というテーブルを用意したらどうですか?

koipo
質問者

お礼

お返事ありがとうございます。 テーブル設計はソフトハウスが設計して、ソフトハウスが潰れたため 悩ましい状態です。 恐ろしくして、Select文しか発行できないのが現状です。

関連するQ&A