- ベストアンサー
[初心者]A表の2つの値からB表を検索する
- 初心者でもわかるSQL文の書き方を教えてください。
- A表のB_ID_1とB_ID_2の値を使用してB表のIDとnameを検索する方法を教えてください。
- SQL文を勉強するにはどのサイトがおすすめですか?
- みんなの回答 (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"にしてください。
その他の回答 (1)
- level2012
- ベストアンサー率63% (12/19)
テーブルの設計を考え直した方がよろしいのではないでしょうか? そのような場合は、B_ID_1 と B_ID_2 というテーブルを用意したらどうですか?
お礼
お返事ありがとうございます。 テーブル設計はソフトハウスが設計して、ソフトハウスが潰れたため 悩ましい状態です。 恐ろしくして、Select文しか発行できないのが現状です。
お礼
もとめていた情報を出すことができました。 本当にありがとうございました<_o_>