• ベストアンサー

同じ表を複数回結合する場合

例えば、名前、出身県、現住所 のような表があります。 出身県と現住所は県名マスターを参照したいのですが、 select (名前、 県名マスター.県名 as 出身県、 県名マスター.県名 as 現住所 from 人名表 p left join 県名マスター k on p.出身県 = k.コード) left join 県名マスター on p.現住所 = k.コード; としたのですが、出身県も現住所も同じになってしまいます。 どのような結合が良いのでしょうか?  

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

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.1

複数結合したいテーブルに異なる別名を付けて結合すれば良いかと。 例) ---------------------------------- SELECT 名前, k1.県名 as 出身県, k2.県名 as 現住所 FROM 人名表 p left join 県名マスター k1 on p.出身県 = k1.コード left join 県名マスター k2 on p.現住所 = k2.コード; -------------------------------------

Beguate
質問者

お礼

うまくいきました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 異なるデータベース間のテーブル結合

    DB名:db1 TABLE名:得意先マスタ DB名:db2 TABLE名:ユーザマスタ 以上のように、異なるデータベースに存在する2つのテーブルをLEFT JOINさせたいです。 結合条件は ユーザマスタ.得意先コード = 得意先マスタ.得意先コード とします。 この場合の結合方法を教えてください。 以下のようなSQL文を書いても駄目でした。 SELECT * FROM db1.ADMINISTRATOR.得意先マスタ AS  得意先マスタ   LEFT OUTER JOIN db2.ADMINISTRATOR.ユーザマスタ AS ユーザマスタ ON ユーザマスタ.得意先コード = 得意先マスタ.得意先コード よろしくお願いいたします。

  • mysqlで表の結合下記のように書きましたが

    mysqlで表の結合。 下記のように書きましたが、うまく動きません。 「left JOIN kashu ka2 ON song.kashu_2_ID = ka2.kashu_ID」 「ka2.kashu as kashu2」 ↑この部分、2つを追加しました。 何も表示されませんでした。 上の二つを削除すると動きます。 何がいけないのでしょうか? mysql_query("SELECT song.song_ID, song_name, song_name_yomi, kashu, kashu_yomi, sakushi, sakushi_yomi, sakkyoku, sakkyoku_yomi, hennkyoku, hennkyoku_yomi, tie_up.tie_up, ti2.tie_up as tie_up2, ka2.kashu as kashu2 FROM (((((( song left JOIN kashu ON song.kashu_1_ID = kashu.kashu_ID) left JOIN kashu ka2 ON song.kashu_2_ID = ka2.kashu_ID) left JOIN sakushi ON song.sakushi_ID = sakushi.sakushi_ID) left JOIN sakkyoku ON song.sakkyoku_ID = sakkyoku.sakkyoku_ID) left JOIN hennkyoku ON song.hennkyoku_ID = hennkyoku.hennkyoku_ID) left JOIN tie_up ON song.tie_up_1_ID = tie_up.tie_up_ID) left JOIN tie_up ti2 ON song.tie_up_2_ID = ti2.tie_up_ID where song_name like '%%'");

    • ベストアンサー
    • MySQL
  • 無駄に見える結合の回数を減らしたい

    いつもお世話になります。 VisualStudio2005とSQLserver2008を利用しています。 現在、クライアント毎に宅配便の利用履歴を表示する機能を作成しています。 メインとなる宅配便マスタに複数のマスタを結合して表示しているのですが、処理が非常に遅くて困っています。 主要な原因は結合の多用だと考えているのですが、どう削減していいものかわかりません。 以下は実際のSQL文です。かなり長いので結合部分だけ抜き出しています。 Dim strSelect As String = "" strSelect &= " select CM.クライアント名 as クライアント," strSelect &= " CO13.汎用名称 as ターミナル," strSelect &= " CO2.汎用名称 as 内容," strSelect &= " CO6.汎用名称 as 便種," strSelect &= " CO7.汎用名称 as 運送業者," strSelect &= " AM1.エリア as 仕入エリア," strSelect &= " AM2.エリア as 請求エリア," For i As Integer = 1 To 8 strSelect &= " CO89_" & i & ".汎用名称 as サイズ" & i & ", " strSelect &= " CAST(FLOOR(TTm" & i & ".単価) as int) as 仕入単価" & i & ", " strSelect &= " CAST(FLOOR(TT" & i & ".単価) as int) as 請求単価" & i & ", " strSelect &= " TM.個数" & i & ", " strSelect &= " CAST(FLOOR(TTm" & i & ".単価 * TM.個数" & i & ") as int) as 仕入金額" & i & ", " strSelect &= " CAST(FLOOR(TT" & i & ".単価 * TM.個数" & i & ") as int) as 請求金額" & i & ", " Next strSelect &= " SM.社員名 as 担当" strSelect &= " from 宅配便マスタ as TM " strSelect &= " inner join (select * from クライアントマスタ union select * from 関連会社マスタ) as CM on TM.ClientNO = CM.ClientNO " strSelect &= " left outer join (select * from コードマスタ where 識別コード=00002) as CO2 on TM.内容NO = CO2.汎用コード" strSelect &= " left outer join (select * from コードマスタ where 識別コード=00006) as CO6 on TM.便種 = CO6.汎用コード" strSelect &= " left outer join (select * from コードマスタ where 識別コード=00007) as CO7 on TM.運送業者 = CO7.汎用コード" strSelect &= " left outer join (select * from コードマスタ where 識別コード=00013) as CO13 on TM.ターミナル = CO13.汎用コード" For i As Integer = 1 To 8 strSelect &= " left outer join (select * from コードマスタ where 識別コード=00008 or 識別コード=00009)" strSelect &= " as CO89_" & i & " on TM.サイズ" & i & " = CO89_" & i & ".汎用コード" Next For i As Integer = 1 To 8 strSelect &= " left outer join (select * from 宅配便タリフ where ClientNO = '" & FlexI & "') as TTm" & i & "" strSelect &= " on TM.仕入エリア = TTm" & i & ".エリア and TM.便種 = TTm" & i & ".便種 " strSelect &= " and TM.運送業者 = TTm" & i & ".運送業者 and TM.サイズ" & i & " = TTm" & i & ".サイズ" strSelect &= " and TM.出荷日 >= TTm" & i & ".適用開始 and TM.出荷日 <= TTm" & i & ".適用終了" Next For i As Integer = 1 To 8 strSelect &= " left outer join 宅配便タリフ as TT" & i & " on TM.ClientNO = TT" & i & ".ClientNO and TM.請求エリア = TT" & i & ".エリア" strSelect &= " and TM.便種 = TT" & i & ".便種 and TM.運送業者 = TT" & i & ".運送業者 and TM.サイズ" & i & " = TT" & i & ".サイズ" strSelect &= " and TM.出荷日 >= TT" & i & ".適用開始 and TM.出荷日 <= TT" & i & ".適用終了" Next strSelect &= " left outer join エリアマスタ as AM1 on TM.仕入エリア = AM1.コード" strSelect &= " left outer join エリアマスタ as AM2 on TM.請求エリア = AM2.コード" strSelect &= " inner join 社員マスタ as SM on TM.社員ID = SM.社員ID" strSelect &= " left outer join 都道府県マスタ as TDM on TM.都道府県 = TDM.コード " strSelect &= " where " & strWhere strSelect &= " order by TM.ClientNO, TM.出荷NO, TM.出荷日" Return strSelect 明らかに無駄と思える箇所としては、佐川急便が一つの伝票で8種類までの重量区分を一度に処理できる形態を取っているため、 サイズ1~8、仕入単価1~8、請求単価1~8を求めるために同じマスタを8つずつ結合する羽目に陥っているところが挙げられますが……。 よい方法がありましたら、是非お知恵を拝借したいと思います。 お手数をおかけしますが、よろしくお願いします。

  • 複数の外部結合

    こんにちは、外部結合の仕方についてお聞きしたいのですが、 このSQL1で抽出されたデータにさらに TABLE3テーブルのデータを追加したくSQL2を作成したのですが、 うまくいきません。 ON TABLE1.[Code]=TABLE3.[Code]の部分をどのように記述すればよいのでしょうか? SQL1--------- TABLE1.[tamp] [Child], TABLE2.* FROM [p].[Price] TABLE1 LEFT OUTER JOIN [p].[Receive] TABLE2 ON TABLE2.[Code]=TABLE1.[Code] SQL2---------- TABLE1.[tamp] [Child], TABLE2.*, TABLE3.* FROM [p].[Price] TABLE1 LEFT OUTER JOIN [p].[Receive] TABLE2 ON TABLE2.[Code]=TABLE1.[Code] LEFT OUTER JOIN [p].[Product] TABLE3 ON TABLE1.[Code]=TABLE3.[Code]

  • テーブルの結合について質問です。

    テーブルの結合について質問です。 テーブル名:SHOSAI SELECT T1.TIMESTAMP AS 登録, T1.UPDATE AS 更新, T2.CONTENT AS コード, . . . FROM SHOSAI T1 LEFT OUTER JOIN X_CODE T2 ON T1.Y_CODE = T2.CODE テーブル名:SHOSAI SELECT T1.TIMESTAMP AS 登録, T1.UPDATE AS 更新, T2.CONTENT AS コード, T1.BANGO AS 番号, T3.CONTENT AS 曜日, . . . FROM JOHO T1 LEFT OUTER JOIN X_CODE T2 ON T1.Y_CODE = T2.CODE LEFT OUTER JOIN H_CODE T3 ON T1.J_CODE = T3.CODE . . . この2つのテーブルを結合したいのですが それぞれのデータ数が300あり SELECT*で呼びだしてもCSEはエラーとなってしまいます。 項目名を選定してプログラムを組んでもうまくできません。 良い方法があれば教えてください。

    • ベストアンサー
    • MySQL
  • 複数の外部結合のやり方

    店舗表(SHOP)、ビル表(BIL)、都道府県表(AREA)、関連表(LINK)を取り出すSQLを 作成しています。 以下の状態だと店舗表(SHOP)とビル表(BIL)が紐づいていないデータにも都道府県 が出てしまいデータとしておかしなことになっています。 (BIL(B)とBIL(C)の紐付きがないから?) Oracleのように外部結合(+)が使えず・・・どのように修正すればいいか教えてください。 SELECT S.SHOP_ID,S.SHOP_NAME,A.TIIKI_NAME,A.TODOUFUKEN_NAME,B.BIL_NAME,B.ADDRESS,B.MEMO FROM SHOP AS S LEFT JOIN BIL AS B ON S.BIL_ID=B.BIL_ID, BIL AS C RIGHT JOIN AREA AS A ON .TODOUFUKEN_ID=A.TODOUFUKEN_ID, LINK AS L WHERE S.TIIKI_ID=A.TIIKI_ID AND S.DELETE=0 GROUP BY SHOP_ID ORDER BY A.TIIKI_ID,S.SHOP_ID よろしくお願いします。

  • 複数DBの結合について

    下記のような構成のDBがあり 全部のTBを結合したいのですが SELECT FROM pears AS pear LEFT JOIN users AS man ON (pear.man_id = man.id) LEFT JOIN users AS woman ON (pear.woman_id = woman.id) USERとPEARの結合は出来たものの HOBYの結合が出来ないので、どうすればよいか よろしくお願いいたします。 TABLE hobys id hoby 1 baseball 2 tennis 3 soccer 4 basketball TABLE users id name hoby_id 1 aaa 1 2 bbb 2 3 ccc 3 4 ddd 4 TABLE pears id man_id woman_id 1 1 2 2 3 4 環境Mysql 4.0.27

    • ベストアンサー
    • MySQL
  • 結合が上手くいきません

    以下のテーブルがあるとします table1 名前|住所コード|勤務地コード table2 コード|名称 テーブル1の検索結果にテーブル2の名称を引っ張ってきて取得したいのですがどうやるのでしょうか? SELECT * from table1 INNER JOIN table1.住所コード ON table2.コード INNER JOIN table1.勤務地コード ON table2.コード これではうまくいきませんでした。 SELECT (select 名称 from table2 where table2.コード=table1.住所コード),(select 名称 from table2 where table2.コード=table1.勤務地コード) FROM table1 これは上手くいくのですが重いらしいので、、、

    • ベストアンサー
    • MySQL
  • 集合関数(MIN)で取得した値をキーする場合

    SQLの構文でご教授願います。 テーブル1(顧客マスタ) 顧客番号  住所コード 1        01 1        02 1        03 テーブル2(住所マスタ) 住所コード 住所 01       ううう 02       いいい 03       あああ 上記2テーブルを連結し、 「顧客番号」と「同一顧客内の最小の住所コード」と「その住所コードの住所」を取得したいのですが、、、 SELECT 顧客マスタ.顧客番号,MIN(住所マスタ.住所コード) AS 住所コード,MIN(住所マスタ.住所) AS 住所 FROM 顧客マスタ INNER JOIN 住所マスタ ON 顧客マスタ.住所コード = 住所マスタ.住所コード GROUP BY 顧客マスタ.顧客番号; と発行すると、 顧客番号  住所コード 住所 1        01      あああ となってしまいます。 これを、 顧客番号  住所コード 住所 1        01      ううう のように取得したいのですが、 どのようなSQL文を書けばよいのでしょうか。 ちなみに、VIEWは使いたくなく、複雑なSQL文でもかまわないので、 一度で持ってこれるような構文はないでしょうか? 宜しくお願いいたします。

  • 外部結合について

    以下のSQLの2つの結果は同じでしょうか? LEFT OUTHERは、ON句の中の左の表を全て取得するというものでしょうか? SELECT ename, dname, jname FROM emp e LEFT OUTHER JOIN dept d ON (e.deptno=d.deptno) LEFT OUTHER JOIN job j ON (e.jobid=j.deptno); SELECT ename, dname, jname FROM emp e RIGHT OUTHER JOIN dept d ON (d.deptno=e.deptno) RIGHT OUTHER JOIN job j ON (j.jobid=e.deptno); よろしくお願いします。