• 締切済み

外部結合について

SQL文で、 select・・・・(select・・・・・) a ・・ となっていて、このaを使ってjoinをしたいと思っているのですが、 select・・・・(select・・・・・) a From (a right join NAME b on a.CD=b.CD) right join c・・・・・・ としてしまうとエラーとなってしまいます。 このaの使い方がわかりません。テーブル名という訳ではないので・・。 どなたかアドバイスお願いします。

noname#64070
noname#64070
  • MySQL
  • 回答数1
  • ありがとう数0

みんなの回答

回答No.1

列、式、問い合わせ等の後に指定している「[as] 名前」は、別名やエイリアスと呼ばれます。 この別名を、ジョインや検索条件式で指定できるかどうかは、SQLの書き方次第です。 今考えているSQLを、省略しないで提示できませんか? できれば、表のデータと得たい結果を示してください。また、バージョンも明記して ください。

noname#64070
質問者

補足

以下がSQL文になります。 MySQL(バージョン5.0)を使用していますので、WHEREの「(+)」は使えないのです。 まだ作り始めなので、残念ながらデータ等はありません。 SELECT a.KOKYAKU_CD, a.KOKYAKU_NAM, concat(a.JITAKU_ADRESS1,a.JITAKU_ADRESS2,a.JITAKU_ADRESS3), concat(a.JITAKU_tel_no1,'-',a.JITAKU_tel_no2,'-',a.JITAKU_tel_no3), a.KINMU_NAM, concat(a.KINMU_tel_no1,'-',a.KINMU_tel_no2,'-',a.KINMU_tel_no3), a.KOKYAKU_KBN, a.RENRAKUSAKI_KBN, c.max_torihiki_date, concat(b.SHAIN_NAM_SEI,' ',b.SHAIN_NAM_MEI), concat(a.keitai_tel_no1,'-',a.keitai_tel_no2,'-',a.keitai_tel_no3), a.mail_address, j.shozoku_course1, j.shozoku_course2, j.shozoku_course3, j.shozoku_course4, j.shozoku_course5, j.shozoku_course6, c.max_tori_kbn FROM KOKYAKU a, SHAIN b, JUCHU j, ( SELECT a.KOKYAKU_CD max_kokyaku_cd, MAX(a.TORIHIKI_KBN) max_tori_kbn, a.SEIRI_NO max_seiri_no, a.TORIHIKI_DATE max_torihiki_date, MAX(a.EIGYO_TANTO_CD) max_tanto_cd FROM RIREKI_TORIHIKI a, ( SELECT a.KOKYAKU_CD, MAX(a.SEIRI_NO) max_seiri, b.max_date FROM RIREKI_TORIHIKI a, ( SELECT m.KOKYAKU_CD, MAX(m.TORIHIKI_DATE) max_date FROM RIREKI_TORIHIKI m GROUP BY m.KOKYAKU_CD ) b WHERE a.TORIHIKI_DATE = b.max_date AND a.KOKYAKU_CD = b.KOKYAKU_CD GROUP BY a.KOKYAKU_CD, b.max_date ) b WHERE a.KOKYAKU_CD = b.KOKYAKU_CD AND a.SEIRI_NO = b.max_seiri AND a.TORIHIKI_DATE = b.max_date GROUP BY a.KOKYAKU_CD, a.SEIRI_NO, a.TORIHIKI_DATE ) c WHERE a.KOKYAKU_CD = c.max_kokyaku_cd(+) AND b.shain_cd(+) = c.max_tanto_cd GROUP BY a.KOKYAKU_CD, a.KOKYAKU_NAM, a.JITAKU_ADRESS1,a.JITAKU_ADRESS2,a.JITAKU_ADRESS3, a.JITAKU_tel_no1,a.JITAKU_tel_no2,a.JITAKU_tel_no3, a.KINMU_NAM, a.kinmu_tel_no1,a.kinmu_tel_no2,a.kinmu_tel_no3, a.KOKYAKU_KBN, a.RENRAKUSAKI_KBN, c.max_torihiki_date, b.SHAIN_NAM_SEI,b.SHAIN_NAM_MEI, a.KOKYAKU_KANA ORDER BY a.KOKYAKU_KANA

関連するQ&A

  • 外部結合について

    SQL文で、 select・・・・(select・・・・・) a ・・ となっていて、このaを使ってjoinをしたいと思っているのですが、 select・・・・(select・・・・・) a From (a right join NAME b on a.CD=b.CD) right join c・・・・・・ としてしまうとエラーとなってしまいます。 このaの使い方がわかりません。 どなたかアドバイスお願いします。

  • 外部結合について

    left joinとright joinが交じり合った構文で途方に暮れています・・。 以下の(+)を使わずに、left joinとright joinを使うにはどのように書けばいいのでしょうか? ・・・・・・ FROM A,B,C WHERE A.CD=B.CD(+) AND B.NAME(+)=MAX(A.NAME) すみませんがよろしくお願いします。

  • 複数テーブルを結合するには?

    OS:WINDOWSXP SP2 ORACLE:Oracle9i Enterprise Edition Release 9.2.0.1.0 A, B, Cというテーブルがあるとします。 それぞれのテーブルには XXカラムと YYカラムがあるとします。 2つのテーブルを結合させるには、以下のSQL文を記述すれば良いと考えています。 SELECT A.*,B.* FROM A JOIN B ON A.XX = B.XX 3つのテーブルを結合するには、以下のSQL文を記述しています。 SELECT A.*,B.*,C.* FROM A JOIN B ON A.XX = B.XX JOIN C ON A.XX = C.XX 但し、この記述方法でいきますと、Cテーブルを右側外部結合に指定した場合のみ、 ORA-00904 "C" 無効な識別子です。 というエラーメッセージが表示されます。 SELECT A.*,B.*,C.* FROM A JOIN B ON A.XX = B.XX RIGHT OUTER JOIN C (←LEFT OUTER、FULL OUTER)なら通ります) ON A.XX = C.XX 何故、右側外部結合のみ不正となるのか不明であり、解決策が見つかりません。 複数のテーブルを結合する為のSQL文の記述方法を教えて頂けますでしょうか?

  • テーブルを結合

    テーブルの結合に関して質問します。 ネットなどでinner joinを使った複数のテーブル結合が参考として 書いてあったのですが(3つまで), 4つテーブルを結合する事は 出来るのでしょうか? A,B,CテーブルにはID,NAMEがあります。 DテーブルにはA,B,CテーブルのIDがあります。 参考サイトを見て3つのテーブルを結合するSQLが以下になります。 SELECT a.name, b.name, c.name FROM a INNER JOIN (b INNER JOIN c ON b.id = c.id) ON a.id = c.id よろしければアドバイスお願いします。

  • 多段外部結合はできる?

    mysqlにおいて、多段の外部結合はできるのか今模索しております。 例えば、A、B、Cと3つテーブルがあった場合に、 「Aに対してBを外部結合」 「Bに対してCを外部結合」 としたいのですが、どうやってもCテーブルの値が取得できず常にNULLになっている状態です。 例として、以下の条件で実行すると、Cテーブルの値が取得できません。 ---- (テーブル) A [id, name, b_id] ※b_idはB.idの外部キー B [id, name, c_id] ※c_idはC.idの外部キー C [id, name] (クエリ) select A.name, B.name, C.name from A left join B on (A.b_id = B.id) left join C on (B.c_id = C.id) ---- どうやったらうまく取得できますか?もしくはできないのでしょうか? ご存知の方、ご教授ください。

    • ベストアンサー
    • MySQL
  • 固定値を含む結合と複数テーブルの結合について

    「1.固定値を含む結合」と「2.複数テーブルの結合」について教えて下さい。 最近oracleを使い始めてSQLで表の結合を書く場面があるんですが LEFT(RIGHT) JOIN を使うのか、(+)を使って書くのかで迷っています。 LEFT(RIGHT) JOINだと固定値を含めて外部結合しようとするとエラーになってしまいます。 それが嫌で(+)を使っていたんですが 今度は複数のテーブルを(+)で結合しようとするとエラーになってしまいます。 (AテーブルとBテーブル、AテーブルとCテーブルなど?) こういう場合はどうすれば良いのでしょうか? とりあえず副参照をFROMに指定して対処してるんですが 何かきちんとした書き方があるのでしょうか?誰か教えて下さい。

  • SQL 外部結合

    Access2003でSQLをかいています。 以下のように書いているのですが、 「結合式がサポートされていません」というエラーが発生します。 対応策をご存知の方、お教えいただけますでしょうか。 使用するテーブルは以下の3つです。 ・社員テーブル ・所属テーブル ・判定テーブル それぞれのテーブルの項目は以下のとおりです。 ▼ 社員テーブル -------------------   個人No   入社年度 ▼ 所属テーブル -------------------   個人No   所属コード ▼ 判定テーブル -------------------   所属コード   入社年度   判定フラグ 下記のようなSQLを書いています。 --------------------------------------------------------------------- SELECT A.個人No, C.判定フラグ FROM (社員マスタ A  LEFT JOIN 所属テーブル B       ON (A.個人No = B.個人No))  LEFT JOIN 判定テーブル C       ON (B.所属コード = C.所属コード AND A.入社年度 = C.入社年度) --------------------------------------------------------------------- 最終行の「AND A.入社年度 = C.入社年度」がなければ、SQLは実行できますが 入社年度で条件を絞れないので正しい結果になりません。 LEFT JOIN 句は3テーブル目の条件式で1テーブル目を参照できないということでしょうか?

  • テーブル結合について

    SQL Serverで、メイン、サブ1、サブ2、サブ3、サブ4というテーブルがあり、以下のSQLを実行すると、メインにあるすべてのデータ(10列)が抽出されます。 SELECT * FROM メイン INNER JOIN サブ1 ON メイン.name1=サブ1.id INNER JOIN サブ2 ON メイン.name2=サブ2.id INNER JOIN サブ3 ON メイン.name3=サブ3.id しかし、上記のSQL文に追加して、 SELECT * FROM メイン INNER JOIN サブ1 ON メイン.name1=サブ1.id INNER JOIN サブ2 ON メイン.name2=サブ2.id INNER JOIN サブ3 ON メイン.name3=サブ3.id INNER JOIN サブ4 ON メイン.name4=サブ4.id とすると、メイン内の10列のうち、2列しか抽出されません。 サブ4を結合しても、一つ目のSQL文と同じ結果を抽出したかったのですが、どこがおかしいのでしょうか? SQL文がまずいのか、サブ4のテーブル内容のせいなのか、SQL Serverの設定がおかしいのか、さっぱり見当がつきません。 足りない情報がありましたら補足いたしますので、どうぞよろしくお願いします。

  • SQL 外部結合について

    EXCELでODBC接続で外部データを取り込み、クエリテーブルを作成するところまではできるのですが、MicrosoftQueryを使って外部結合をしようとすると、テーブルが3個以上ある場合は外部結合できませんとエラーが表示されます。 直接SQLをさわれば出来るのかと思い、 SELECT フィールド名1, フィールド名2, ... FROM (((TABLE1 LEFT JOIN TABLE2 ON TABLE1.NO = TABLE2.NO)LEFT JOIN TABLE3 ON TABLE1.NO = TABLE3.NO)LEFT JOIN TABLE4 ON TABLE1.NO = TABLE4.NO)LEFT JOIN TABLE5 ON TABLE1.NO = TABLE5.NO を入力したのですが、「ORA-00942: 表またはビューが存在しません」というエラーが発生しました。 いろいろ調べてみたのですが全くの初心者なもので本当に困っております。 どなたかアドバイス等よろしくお願いします。

  • 複数の外部結合

    こんにちは、外部結合の仕方についてお聞きしたいのですが、 この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]