• 締切済み
  • 困ってます

JOINのネスト制限?

基本的な問題かもしれませんが、SQLのJOINの使い方が判らないので教えて下さい。 SQLで A表とB表とC表をINNER JOINした表に対して、 D表をOUTER JOINした結果に対して、E表をINNER JOINしたいのですが、 SQL文で書くことは可能でしょうか? SELECT ((((cols FROM A INNER JOIN B ON --) INNER JOIN C ON --) OUTER JOIN D ON --) INNER JOIN E ON --) と単純に書くとネスト数のオーバーなのかエラーが出ます。 後ろの部分だとサブクエリーに対してJOINすればよいかもしれませんが、主ファイルに当る部分の場合はサブクエリーに切り出す方法が判りません。 よろしくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数722
  • ありがとう数4

みんなの回答

  • 回答No.1

>SQL文で書くことは可能でしょうか? 具体的な結合方法が分からないのですが、可能ではないでしょうか? >SELECT ((((cols FROM A INNER JOIN B ON --) INNER JOIN C ON --) > OUTER JOIN D ON --) INNER JOIN E ON --) >と単純に書くとネスト数のオーバーなのかエラーが出ます。 条件など、記述を丸ごと省略しないでください。これらは回答者が内容を判断する上での大切なヒントです。 単に「エラーが出る」ではなくて、どういうエラーなのか、内容を書いてください。 「SELECT ((((cols FROM A INNER JOIN B ~」の「cols」って、もしかして列名ですか?括弧の位置がおかしいですけど? select ~ from ((A inner join B on ~ inner join C on ~) left join D on ~) inner join E on ~ といった形式になるのでは?

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • OUTER JOINについて

    こんにちわ。 OUTER JOINを使ったSQL文について質問させてください。 今3つのテーブル(EMPLOYEES, CUSTOMERS, ZIPCODES)があるとします。郵便番号ごとに従業員とお客さんのIDを表示するSQLはわかるのですが(下に書きます)、郵便番号ごとに従業員とお客さんの数を表示するSQL文がわからず、途方に暮れてます。どなたか教えていただけないでしょうか? よろしくお願いいたします。 郵便番号ごとに従業員とお客さんのID SQL> select z.zip, e.eno, c.cno from zipcodes z full outer join employees e on (z.zip=e.zip) full outer join customers c on (z.zip=c.zip); ZIP ENO CNO ---------- ---------- ---------- 49008 1001   1111 49009    2222 49001 1000 3333 49017 1002 49023 49024 それをこうしたいのですが・・ ZIP ENUM CNUM  ---------- ---------- ---------- 49008 1 1 49009 1 49001 1 1 49017 1 49023 49024

  • ちょっと見かけないinner joinについて

    どなたか以下の構文について教えて下さい。 どこのDBMSで使用されるものなのでしょう? SELECT B.項目1, B.項目2, A.項目2, A.項目3 FROM ( ( SELECT * FROM Bテーブル WHERE 項目3>"1" ) B INNER JOIN ( SELECT * FROM Aテーブル WHERE 項目2=10 ) A ON B.項目1=A.項目1; 意味はわかるのですが、普通のinner joinとは違うもので。

  • サブクエリ

    見ていただいてありがとうございます。 ただいま、業務でSQLを作成しているのですが、 なにぶん経験が浅く、行き詰ってしまっています。 どなたかわかる方、どうぞご教授ください。 環境は、 OS:WinXP Honme PG:VB.net Server:SQLServer2000 です。 わからないのは、以下の様なSQLです。 SELECT * from (SELECT tblA.field1 , tblA.field2, MAX(tblA.field3) AS MxNum FROM ( (tblA INNER JOIN tblB ON tblA.field1 = tblB.field1) INNER JOIN tblC ON tblA.field2 = tblC.field1 ) INNER JOIN tblD ON tblA.field4 = tblD.field1 GROUP BY tblA.field1,tblA.field2,tblA.field3) サブクエリの使い方がおかしいらしく エラーとなってしまいます。 (「fromの後に不要な文字が・・・」という  構文エラーになります。) サブクエリとして使用しようとしている()内の SELECT文は、クエリアナライザで実行すると 正常に終了して結果が返ってきます。 大変困っているので、 どうか宜しくお願いいたします。

  • サブクエリ内で INNER JOIN は

    グルーピング内で、あるカラムの最大値のレコードで絞り込む方法は、 以下のサイトで知ることができましたが。 http://www.yokablo.com/20120905717.html tb_score +-------+-------+-------+ | c_name | game | c_score | +-------+-------+-------+ | 山田 | 高飛び | 90 | +-------+-------+-------+ | 山田 | 徒競走 | 85 | +-------+-------+-------+ | 山田 | 玉入れ | 90 | +-------+-------+-------+ | 鈴木 | 徒競走 | 85 | +-------+-------+-------+ | 鈴木 | 騎馬戦 | 50 | +-------+-------+-------+ | 室伏 | 綱引き | 100 | +-------+-------+-------+ | 室伏 | 玉入れ | 10 | +-------+-------+-------+ SQL文: SELECT * FROM tb_score INNER JOIN ( SELECT c_name, MAX(c_score) AS MAXSCORE FROM tb_score GROUP BY c_name ) AS TBDUMMY1 USING (c_name) WHERE c_score = MAXSCORE 私の場合、t_score の親テーブル名`t_company`と、 子テーブル`t_items`がありまして、 以下のようなことをやりたかったのですが、エラーとなります。 上記SQL をサブクエリにします。 select * from ( SELECT * FROM tb_score INNER JOIN ( SELECT c_name, MAX( c_score ) AS MAXSCORE FROM tb_score GROUP BY c_name ) AS TBDUMMY1 USING ( c_name ) INNER JOIN t_company ON t_company.c_name = tb_score.c_name WHERE c_score = MAXSCORE ) as T1 , t_items where T1.id_score = t_items.id_score 結果エラーメッセージは、 #1060 - Duplicate column name 'c_name' でした。 エラー箇所が、 GROUP BY c_name か、 USING ( c_name ) か、 INNER JOIN t_company ON t_company.c_name = tb_score.c_name なのか、分かりません。 SQL の規則としてやってはいけないことをやっていると想像してますが、 ご指摘・ご指導いただけると大変に助かります。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • inner joinをすると数がおかしくなります

    SQLのinner joinについてお教え下さい。環境はWin 7 MYQL5です。 t1テーブルのデータ ID,在庫 001,22 t2テーブルのデータ ID,出庫 001,17 001,3 SELECT Sum(t1.stock) AS `在庫` FROM t1 where id = '001' 上記SQLの結果は22と表示されます。 SELECT Sum(t1.stock) AS `在庫` FROM t1 INNER JOIN t2 on t1.id = t2.id where id = '001' とやると、結果が44になってしまいます。 なぜそんな結果になってしまうのでしょうか? 結果はt1.stockは在庫22なので、22と表示するようにしたいです。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • LEFT OUTER JOIN でB表の制限付きで表示したいのですが

    はじめまして。midwagonです。 SQLがわからないので教えてください。 A表:id,name B表:id,hiduke これを結合してA表にあるものをすべて表示したいのですが B表のhiduke="20080531" と 日付の制限をかけると何もかえってきません。 どうすればいいのか教えてください。 select A.id,A,name from A left outer join B on A.id=B.id where B.hiduke="20080531";

  • INNER JOINについて

    こんにちは、現在下のWEBでSQLの勉強をしているのですが・・・。 http://www.pursue.ne.jp/jouhousyo/SQLDoc/select21.html INNER JOINについて質問です。 FROM 表名1 INNER JOIN表名2 ON 表名1.フィールド名 = 表名2.フィールド名 このONというコマンド、これは連結するフィールド名を表しているのですよね?これは、無くてはならないコマンドでしょうか。例えば、このウェブの問題だと、売上表.顧客CD=顧客表.顧客CD をする事で、顧客CDがソートされ、同じものが連結されてます。 もし、顧客CDの値が、二つの表で異なった場合、異なった値は切り捨てられ、その行は融合されないと言う事ですよね? なら、例えば普通に二つの表の値を比べたい場合、例えば、 A表: 売り上げ総合、日付、顧客表 B表: 顧客名、売り上げA、売り上げB という表があったとして、表Bの売り上げレートを表Aの総売上で割り、書く平均値を出したい場合、 SELECT  表B.売り上げA / 表A.売り上げ総合, 表B.売り上げB / 表A.売り上げ総合 FROM 表A INNER JOIN 表B として、ONを使わなくても大丈夫でしょうか?

    • ベストアンサー
    • MySQL
  • SQL文の変換(Oracle→MySQL)結合句

    OracleからMySQLへSQL文を変換するにあたり、 テーブル結合部分が複数ありややこしくて以下で合っているのか、分かる方いましたらご教授ください。 ■Oracle  SELECT *  FROM m, h, p, c  WHERE m.mid = h.mid(+)  AND m.tcd = '0'  And h.pid = p.pid(+)  And m.rcd = c.rcd  And c.cid = 'aaa' ■MySQL  SELECT *  FROM m left outer join h on m.mid = h.mid and m.tcd = '0'     h left outer join p on h.pid = p.pid     m left inner join c on m.rcd = c.rcd and c.cid = 'aaa'

    • ベストアンサー
    • MySQL
  • left outer joinで抽出したい

    SELECT (TABLE1 INNER JOIN TABLE2 ON TABLE1.CODE = TABLE2.CODE) INNER JOIN TABLE3 ON TABLE1.JAN = TABLE3.JAN というSQL文があります。この文を変更して下記の条件での抽出をおこないたいと思います。 ■TABLE1.JANを元にする。 ■TABLE1.JAN = TABLE3.JANは抽出に含めない ■TABLE1.JANに存在していて、TABLE3.JANに存在しないJANをTABLE1.JANから抽出 このようなSQL文をかきたいのですが、どのようなSQL文にしたらよいでしょうか? left outer joinを使えばいいとは思うのですが、そこから先が思い浮かびません。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • inner joinについて

    SQLのデータ抽出方法についてお教え下さい。 TABLE_2をdistinctで重複を無くして、TABLE_1とinner joinさせたいです。 select distinct TABLE_2.id と select TABLE_1.ID from TABLE_1 inner join distinct TABLE_2.ID といったようなことをやりたいです。 TABLE_1 ID 001 001 002 002 002 TABLE_2 ID 001 001 002 002 002 環境はMYSQL5.5になります。よろしくお願いいたします。