LEFT OUTER JOINで抽出条件を設定する方法

このQ&Aのポイント
  • LEFT OUTER JOINを使用してTABLE1とTABLE3を結合し、TABLE1.JANに存在していてTABLE3.JANに存在しないJANを抽出する方法について教えてください。
  • 質問者は、TABLE1.JANを元に抽出を行いたいと考えています。具体的には、TABLE1.JANとTABLE3.JANが一致しないようなJANを抽出したいそうです。
  • LEFT OUTER JOINを使用し、TABLE1とTABLE3を結合することで、TABLE1.JANに存在していてTABLE3.JANに存在しないJANを抽出することができます。具体的なSQL文の書き方について教えてください。
回答を見る
  • ベストアンサー

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
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • yorozu_ya
  • ベストアンサー率54% (76/140)
回答No.1

... TABLE1 LEFT JOIN TABLE3 ON TABLE1.JAN = TABLE3.JAN WHERE TABLE3.JAN IS NULL

mellow91
質問者

お礼

ありがとう!!

関連するQ&A

  • Left outer join とかのLeft

    Left outer join とright outer join ですが、解説などをみると、左右に表が描かれてあって、線を引いたりして結合していくのですが、 何をもって左とか右とかいうのでしょうか? テーブル1が左で、テーブル2が右みたいな感じで解説されるのですが、先に出てきた1も、あとに出てきた2も、単に出てきた順番であり、記号と思われます。1と2を入れ替えたら同じことです。Left outer join Table1 もRight outer join Table2 も同じことのように思われます。私はなにか勘違いしているのでしょうか?

  • 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
  • 複数のテーブルをJOINして更新する方法

    複数のTABLEをJOINさせてアップデートをしたいと思っています。 TABLE1とTABLE2のCODEはJOINができます。 TABLE1とTABLE3のJANはJOINができます。 TABLE2にはJANフィールドがありません。 TABLE3のSTOCKをTABLE2のSTOCKに代入したいと思います。 以上の条件により下記のSQLを作って見ました。 UPDATE (TABLE1 INNER JOIN TABLE2 ON TABLE1.CODE = TABLE2.CODE) INNER JOIN TABLE3 ON TABLE1.JAN = TABLE3.JAN SET TABLE2.STOCK = TABLE3.STOCK WHERE TABLE1.FLAG=0 本を読んでみると、SELECT文による複数のテーブルからデータを引っ張ってくる例は載っているのですが、複数のTABLE情報を元にUPDATEする例は載っていませんでした。上記のようなコードはあっているでしょうか?利用している環境はWin XP Pro、MYSQL 5.5です。 よろしくお願いいたします。

  • 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について

    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になります。よろしくお願いいたします。

  • 多数のテーブルでのFULL OUTER JOIN

    SQL Sever 2005 を利用しております。5つのテーブルから値を取得するSQL文を作成したいと考えております。3つまでのテーブルのFULL OUTER JOIN は例がるのですがそれ以上となると調べても判りませんでした。ご教授お願い致します。 TABLE1~TABLE2は同じ構成で発生した5つのテーブルを1つのテーブルに合体して データどれか1つのテーブルで発生すれば表示したい。 出来れば現在作成中のSQL文がFULL OUTER JOINで作成しているのでこれを流用したいので FULL OUTER JOIN の方法で教えて頂ければ幸いです。 以上よろしくお願い致します。 (※IDが主キー) テーブル名:TABLE1 ID-----金額 ----------- 01-----1000 11-----2000 テーブル名:TABLE2 ID-----金額 ----------- 02-----2000 12-----3000 テーブル名:TABLE3 ID-----金額 ----------- 03-----3000 テーブル名:TABLE4 ID-----金額 ----------- 02-----1000 04-----4000 テーブル名:TABLE5 ID-----金額 ----------- 01-----1000 05-----5000 作成したいSQL文の結果 ID-----TABLE1金額---TABLE2金額---TABLE3金額---TABLE4金額---TABLE5金額 01-----------1000----------------------------------------------------1000 02-------------------------2000------------------------1000 03----------------------------------------3000 04-----------------------------------------------------4000 05-------------------------------------------------------------------5000 11-----------2000 12-------------------------3000

  • 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すればよいかもしれませんが、主ファイルに当る部分の場合はサブクエリーに切り出す方法が判りません。 よろしくお願いします。

  • inner join left joinについて

    inner join left joinの動きについては 理解しているつもりなのですが どういったテーブルの時innerにして どんなテーブルの時left joinにするかが わかりません inner join left join の選択方法 ※どっちを使えばよいかの見極め方について 教えて下さい

  • SQL LEFT JOIN

    SQLでわからないことがあるので質問させていただきます。 例えばの話ですが在庫テーブルというテーブルがあってそこに商品マスタ をLEFT JOINする際に SELECT *  FROM 在庫テーブル LEFT JOIN 商品マスタ ON 品番 = 品番 として実行すると返ってくる結果は在庫テーブルの全レコードと 品番で結んだ商品マスタに存在するデータってことですか? 上記のSQLと SELECT * FROM 在庫テーブル で返ってくるレコード件数が違うという時はどういう可能性が考えられるでしょうか? ちなみに商品マスタの品番レコードはすべてユニークになっていて 色やサイズで品番が複数存在するものではありません。 何回やってもレコード件数が前者のほうが多くなってしまいます。 分かる方がいらしたらぜひ教えていただきたいです。

  • left outer joinが上手くいきません

    四つのテーブルに分かれたデータを、結合しつつ、結合後のテーブルのデータがチェック用テーブルに含まれていないものを抽出したいのですが、left outer joinなど色々ためしても、構文エラーなどになって上手くいきません。 具体的に書くと、 【顧客名テーブル:customer】 顧客ID:customer_id 顧客コード:customer_code 顧客名:customer_name 【最新申込みテーブル:recently】 顧客ID:customer_id 日付:order_date 【過去申込みテーブル:old】 顧客ID1:customer_id1 顧客ID2:customer_id2 日付:order_date 【チェック用テーブル:check】 顧客コード:customer_code 顧客名:customer_name とあるとします。 【最新購入テーブル】と【過去購入テーブル】の両方の顧客IDを抽出し、【顧客名テーブル】の顧客IDと紐付けしてから、顧客コードの一覧を作り、【チェック用テーブル】の顧客コードに含まれない、【顧客名テーブル】の顧客コードを一覧で出力したいのですが、なかなか上手くいかなくて困っています。 ややこしいのは、【過去購入テーブル】の中に含まれる顧客ID1、顧客ID2ともに、フィールド名は違いますが、登録されるデータは、【顧客名テーブル】の顧客IDと同じになるので、【最新購入テーブル】と【過去購入テーブル】で抽出する顧客ID一覧は、 顧客ID:customer_id 顧客ID1:customer_id1 顧客ID2:customer_id2 の三つになります。 UNIONなどで結合した顧客ID一覧を【顧客名テーブル】とつないで顧客コードを出して...など色々やってはみましたが、構文エラーが多く、そもそもどこが間違っているかもよくわからなくて、困っています(>_<)

    • ベストアンサー
    • MySQL