- ベストアンサー
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: 表またはビューが存在しません」というエラーが発生しました。 いろいろ調べてみたのですが全くの初心者なもので本当に困っております。 どなたかアドバイス等よろしくお願いします。
- kep08
- お礼率66% (2/3)
- Oracle
- 回答数3
- ありがとう数5
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
まずは、問題の切り分けのために、sql*plusで、同じSQL文が通るかどうか確認されたほうが良いと思いますよ。
その他の回答 (2)
- bin-chan
- ベストアンサー率33% (1403/4213)
#1です。すみません。間違えてました。 リンクテーブルは、MS-ACCESSでのお話です。 ご質問本文中に「EXCEL」とあるのに、「クエリ」からてっきりMS-ACCESSと思い込んでました。
- bin-chan
- ベストアンサー率33% (1403/4213)
「ODBC」「ORA-」からリンクテーブルのようですが、登場するテーブルは5つともリンクテーブルとして作成されてますか? 一度に5つのテーブルにせずに、3つで作成してみるのは?
お礼
回答ありがとうございます。 リンクテーブルかどうかわからないのですが・・・ 操作としてはエクセルの外部データのインポートでクエリテーブルを作成しております。 いくつかにわけて作成し、最終的にそれらを結合させるということですよね? 明日試してみます。 アドバイスありがとうございます。
関連するQ&A
- 複数の外部結合
こんにちは、外部結合の仕方についてお聞きしたいのですが、 この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]
- ベストアンサー
- Oracle
- 結合SQLに関して
結合SQLに関して ある3つのテーブルが存在し、TABLE1の情報を核として、TABLE2,TABLE3と 結合させて情報を取得しようと考えています。 TABLE1とTABLE2だけであれば LEFT OUTER JOIN等を駆使すれば、TABLE1を核として 全件表示可能かと思いますが、TABLE3も含めて結果のような形にしたい場合は、 どのようにSQLを記述すれば良いでしょうか。。。。 初歩的な質問で申し訳ありませんが、教えて下さい。 TABLE1 NO 1 2 3 TABLE2 NO,BUSYO_CODE 1,123 2,123 3,456 TABLE3 BUSYO_CODE,BUSYO_NAME 123,総務 456,経理 結果 NO,BUSYO_CODE,BUSYO_NAME 1,123,総務 2,123,総務 3,456,経理 よろしくお願いします。
- ベストアンサー
- Oracle
- 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テーブル目を参照できないということでしょうか?
- ベストアンサー
- その他(データベース)
- 9iのSQL:1999構文を使用した外部結合について
内部結合の結果とともに、左側の表の持つ一致しない行を戻す結合を左側外部結合、右側の表の持つ一致しない行を戻す結合を右側外部結合と言います。 LEFT OUTER JOIN, RIGHT OUTER JOINキーワードを使用します。 例)SELECT D.部署NO,D.部署名,D.場所,E.従業員,E.従業員名 FROM 部署 D LEFT OUTER JOIN 従業員 E ON (D.部署NO = E.部署NO) ; というかんじでマニュアルに記載されていますが、どこを基準に右側の表とか左側の表とかいっているのか説明だけでは理解できません。どなたか解りやすく教えてください。
- ベストアンサー
- Oracle
- LEFT OUTER 外部結合で一致しない値も表示
select table1.*, table2.no from table1 inner left outer join table2 on table1.id = table2.no 上記の文を使って、一致した値がなくても、 すべて表示させた表を完成させたいのですが、 エラー #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'left outer join table2 on table1.id = table2.no~ が出てしまいます。 何がいけないのか、LEFT OUTERなしでやってみると、 きちんと値が返ってきました。 詳しい方いらっしゃいましたら、どうかお知恵を貸してください。 お願いいたします。
- ベストアンサー
- MySQL
- 多段外部結合はできる?
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
- SQLの外部結合について教えて下さい
いつもお世話になっています。 SQL構文の外部結合が分らなくて困っています。 どうか教えて下さい。 JSPからString Nam = (request.getParameter("param"));で値を受け取ってその値でT_Tableと一致するデータのSQLを実行します。 SELECT * FROM T_Table where ID='"+ Nam +"' order by 日付 desc この結果とT_TableAの「番号」というフィールドと一致する問い合わせのSQLが分りません。自分なりに考えて作りましたがHTMLの部分の表示だけでレコードが表示されないので間違っているのだと思います。 色々調べてみましたが該当のサンプルがなかったので困っています。 教えて下さい!宜しくお願い致します。 【自分で作成してみたSQLです】 テーブルはSQL Serverです。 "SELECT * FROM T_Table where ID='"+ Nam +"' INNER JOIN where ID='"+ Nam +"' ON [T_Table].[番号] = [T_TableA].[番号] order by 日付 desc"
- ベストアンサー
- Java
- オラクル結合SQL
こんばんわ。オラクル初心者です。 オラクル9.1で、下記のようにtable1とtable2を結合して、view1(oracleビュー) を作成したいのですが、どのようなSQLがよいでしょうか。 なかなかうまい方法がなくてこまっています。 table1 no 項目 その他 その他1 1 1 1 2 1 3 .....省略 table2 no 項目 種別 結果 1 1 01 3 1 1 02 8 1 1 03 7 1 2 01 9 1 2 02 6 1 2 03 2 1 3 01 1 ...... view1 良い例 no 項目 結果1 結果2 結果3 1 1 3 8 7 ←種別01 02 03を順にいれる 1 2 9 6 2 1 3 1............ select table1.no,table1.項目,・・・ from table1,table2 where table1.no = table2.no and table1.項目 = table2.項目 ↑おおよそこのような感じになるとは思ってます。 何とか頑張ったのですが、下記のようになってしまうことが 多かったです・・・。どこかSQLがわるいようです。 view1 悪い例 no 項目 結果1 結果2 結果3 1 1 3 8 7 1 1 3 8 7 1 1 3 8 7 1 2 9 6 2 1 2 9 6 2 1 2 9 6 2 1 3 1............ もしご存知の方いらっしゃいましたら、助かります。よろしくお願いいたします。
- ベストアンサー
- Oracle
- Accessの表結合SQL
AccessのSQLで外部結合を複数使うと SQLがエラーになります。 クエリで確認してエラーにならない様につくってみましたが、意図する事をやろうとするとエラーになります。 どこが悪いか教えていただけませんか?おそらくSQLサーバーでは余裕で通るSQLだと思うのですが。。。 SQL = SELECT * FROM T1 LEFT JOIN T2 ON T1.A = T2.A LEFT JOIN T3 ON T1.B = T3.B LEFT JOIN T4 ON T1.C = T4.C AND T4.D = iNum WHERE T1.E = 'iNum' やりたいのはT1を基準にT2,T3,T4からデータを引っ張ってきたい。その条件としてT4から引っ張ってくるのは T4.DがiNumである事、基準となるT1のT1.EがiNumである事です。 Accessでは"AND T4.D = iNum"がだめで、 WHERE区に書くと外部結合にもかかわらずT4.D = iNumのデータしか抽出されなくなる。(T1.C = T4.CのデータがT4.D = iNumでなくてもT1のデータが抽出されなくてはならない。) さらに SQL = SELECT * FROM ((T1 LEFT JOIN T2 ON T1.A = T2.A) LEFT JOIN T3 ON T1.B = T3.B) LEFT JOIN T4 ON T1.C = T4.C AND T4.D = iNum WHERE T1.E = 'iNum' こんな括弧が必要になってくる。 これだとT1とT2を外部結合した結果をT3と外部結合して さらにその結果をT4と外部結合しているという意味あいになってしまって、意図が違うのですが。。 結果は同じなのでAccessに譲ってやってもいいのですが 前者はT1で抽出されなければならないデータが抽出されないので困ります。 よろしくお願いいたします。
- 締切済み
- その他(データベース)
- PL/SQLについて
オラクル初心者ですが、他人が作ったSQLのWhere分で下記表記があります。 どういう意味でしょうか? where テーブル1.フィールド名1 = テーブル2.フィールド名1(+) AND テーブル1.フィールド名1 = テーブル3・フィールド名1(+) AND テーブル1.フィールド名1 = テーブル4.フィールド名1(+) AND ・・・・・続く ネットで調べると、結合の書き方のようですが、この場合どういった結合となるのでしょうか? 例えば、通常結合の場合、 SELECT テーブル1.フィールド1, テーブル2.フィールド1, テーブル3,フィールド1 FROM テーブル1 JOIN テーブル2 ON テーブル1.フィールド1=テーブル2.フィールド1 JOIN テーブル3 ON テーブル1.フィールド1=テーブル3.フィールド1 同様と考えてよろしいのでしょうか?
- ベストアンサー
- Oracle
お礼
回答ありがとうございます。 LEFT JOIN ではなく (+) を使ってみたのですが、それでうまく外部結合を作成することができました。 LEFT JOINの記述の仕方が悪かったのでしょうか。 とりあえず解決致しました。お騒がせしました。 sql*plusというものを知らなかったので、いろいろ調べさせてもらい勉強になりました。 ありがとうございました。