JOINで1つのテーブルに空白があると表示されない

このQ&Aのポイント
  • JOINを使用したSQL文において、特定の条件に合うテーブルを表示する際、テーブル2に関連するデータが存在しない場合、表示されない問題が発生します。
  • テーブル1とテーブル2をJOINし、条件に合致するレコードを取得するSQL文で、テーブル2の非存在データの扱いについて困っています。
  • 具体的には、テーブル1の該当列は存在しているが、テーブル2の該当列が存在しない場合、表示されずに欠落してしまいます。この問題の解決方法について教えてください。
回答を見る
  • ベストアンサー

JOINで1つのテーブルに空白があると表示されない

質問失礼します。 下記のSQL文にて条件に合うものを表示しています。 select table.*, group_concat(table2.title separator '') as title1, table2.non from table2 join table on table.non = table2.non WHERE table.hiduke = '2012-09-21' AND table.genre LIKE '%ポップス%' group by table2.non すると、table.non はあるが table2.non がない場合、表示されなくなります。 table2.nonはなくてもtable.nonを表示させたいのです。 ご教授お願い致します。

  • MySQL
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.2

join の所を、right join に変えてみてください。 これで、うまくいくと思いますけど。 解説:  joinで、結合するには、両方のテーブルに結合条件に該当するレコードが存在することが必要です。  片方のテーブルにだけ存在するデータも欲しい時には、   joinの左側に書いたテーブルのデータが全部欲しい→left join   joinの右側に書いたテーブルのデータが全部欲しい→right join   両方のテーブルのどちらか一つでもあれば全部欲しい→full join  を使用します。  使い方は全く同じ。結果が異なるだけです。

rabbit-kimura
質問者

お礼

できました!! >>両方のテーブルのどちらか一つでもあれば全部欲しい→full join これ、知りませんでした Σr('Д'n)゜ ありがとうございます!!

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

テーブルの状態がわからないのでなにしたいよくわかりませんが joinのところをleft joinにしてもだめですか?

rabbit-kimura
質問者

お礼

できました!! ありがとうございます!!!

関連するQ&A

  • 複数のテーブルを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です。 よろしくお願いいたします。

  • 多数のテーブルでの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を使った文で、date > now();

    質問、失礼いたします。 PHP+MySQLでページを作成しています。 JOINを使って、2つのテーブルを表示しています。 その際に、「明日以降」という条件で絞り込みをしたいのですが、 【 AND date > now(); 】 という指定が上手く反映されません。 SQL文 SELECT table1.*, table2.kaijou, table2.cd, table2.member FROM table1 JOIN table2 ON table1.id = table2.id WHERE word LIKE '%東京%' OR word LIKE '%大阪%' AND date > now(); wordの条件は反映されています。 phpMyAdminの方から、直接SQL文を実行しても同じ結果だったので、 MySQLの方の接続は問題ございませんでした。 ご存じの方、宜しければご教授お願い致します。

    • ベストアンサー
    • PHP
  • 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になります。よろしくお願いいたします。

  • SQLServer T-SQL テーブルのJOIN

    こんにちは。 テーブル"TABLE_A"、"TABLE_B"があり、 各々のテーブルにカラム"COL"があります。 カラム"COL"にインデックスを作成しています。 テーブル"TABLE_A"、"TABLE_B"をカラム"COL"で結合 する際の演算子にLIKE文を用いています。"TABLE_B"の カラム"COL"に"%"を付加していますが、これが原因で "COL"のインデックスが効きません。どのようにすれば LIKE検索でインデックスを有効にすることができるの でしょうか? SELECT * FROM TABLE_A INNER JOIN TABLE_B ON TABLE_A.COL LIKE TABLE_B.COL+'%'

  • 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
  • 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";

  • joinの場合のテーブル名の別名の使用方法

    select * from table1 a,table2 b where a.field1=b.field1; とできますが select * from table1 as a left join table2 as b on a.field1=b.field1; とできません。 joinの場合にテーブル名の別名を使う方法を教えてください

  • JOIN ON しているサブ情報が複数あるとダブる

    質問失礼いたします。 下記のSQL文を使って、「table1」をメインとして「table2」、「table3」を表示しています。 ★現在の状態 【SQL文】 SELECT table1.*, table2.id as t2id, table2.title as t2title, table2.title as t2url, table3.id as t3id, table3.title as t3title, table3.title as t3url, from (table1 left JOIN table2 ON table1.id = table2.id) LEFT join table3 on table1.id = table3.id 【table1】 id  name ... 01 東京 ... 02 栃木 ... 03 埼玉 ... 【table2】 id title          url 01 レストラン東京   http://~ 01 ファミレス東京   http://~ 02 ファストフード栃木   http://~ 03 喫茶さいたま   http://~ 【table3】 02 麺所   http://~ 03 ら~麺   http://~ 【表示】 +───+───────────+───────+ │地域│洋食             │ラーメン店   │ +───+───────────+───────+ │東京│レストラン東京http://~  │         │ +───+───────────+───────+ │東京│ファミレス東京http://~  │         │ +───+───────────+───────+ │栃木│ファストフード栃木http://~│麺所http://~ │ +───+───────────+───────+ │埼玉│喫茶さいたまhttp://~   │ら~麺http://~│ +───+───────────+───────+   ※「http://~」には全てリンクを貼っています サブの「table2」(または、「table3」)に2つの情報があると、 表示した際にレコードが2行になります。 その為、下記の通り情報が複数ある場合は1行にまとめたいと思っています。 ★希望する状態 【表示】 +───+───────────+───────+ │地域│洋食             │ラーメン店   │ +───+───────────+───────+ │東京│レストラン東京http://~  │         │ │   │ファミレス東京http://~  │         │ +───+───────────+───────+ │栃木│ファストフード栃木http://~│麺所http://~ │ +───+───────────+───────+ │埼玉│喫茶さいたまhttp://~   │ら~麺http://~│ +───+───────────+───────+   なにか方法などありましたら、教えて下さい。 宜しくお願い致します。

  • テーブル結合時のあいまい検索について

    はじめまして。Oracle9iでテーブル結合時のあいまい検索を行いたいのですが、エラーが起こってしまいます。 形としては、 SELECT TABLE1.A, TABLE1.B, TABLE1.C, TABLE2.D, TABLE2.E, TABLE2.F FROM TABLE1, TABLE2, WHERE TABLE1.A = TABLE2.D(+) というような形です。ここで、TABLE1のBとCに「%あ%」というあいまい検索をしたいのですが、上記の文に続いて、 AND TABLE1.B LIKE '%あ%' OR TABLE1.C LIKE '%あ%' と続けて実行すると、 ORA-01719: outer join operator (+) not allowed in operand of OR or IN というエラーになってしまいます。 こういった場合はどう対処すればよろしいのでしょうか?SQLについてほとんどわかりませんが、よろしくお願いします。