• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MySQL 外部結合後にWHERE検索できない)

MySQL外部結合後にWHERE検索できない

このQ&Aのポイント
  • MySQLの外部結合後にWHERE検索ができない原因や解決策について教えてください。
  • 超初心者がMySQLの外部結合後にWHERE検索できない問題に困っています。解決方法を教えてください。
  • MySQLで外部結合を行い、その後にWHERE検索をすると全てのデータが表示されてしまいます。問題を解決する方法を教えてください。

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

2個のクエリがUNIONで結合されています。WHERE句は後のクエリにしか見当たりません。 つまり、前のクエリにはWHERE条件が無いので、結合結果が全て出てしまいます。

m_toma
質問者

お礼

早速のご解答、ありがとうございます。 試してみたのですが上手く行きません。 下記の方法と理解して実施。 ------- ~FROM fo f LEFT OUTER JOIN …(←前のクエリ) ★★ココ★★ ~union … ~FROM fo f RIGHT OUTER JOIN …(←後のクエリ) WHERE f.id LIKE … -------- ★の部分に、”後のクエリ”に続くWHERE句と同じ内容を追加して 実行してみましたが、左外部結合を行った状態と同じ結果が返ってきます。 回答の解釈が間違っていたらごめんなさい。 他にお気づきの点がありましたら、ご指摘いただけるとありがたいです。宜しくお願いします。

m_toma
質問者

補足

#1様へ  質問者です。 お礼を掲載の後、もう一度書籍を読み直し、 動きを確認したところ出来ました!! ------- ~FROM fo f LEFT OUTER JOIN …(←前のクエリ) ★左側テーブルWHERE句★ ~union … ~FROM fo f RIGHT OUTER JOIN …(←後のクエリ) ★右側テーブルWHERE句★ -------- で検索条件で一覧表示可能となりました! 本当に助かりました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 外部結合?

    SQLについてです。 テーブルA ID 価格 タイプ 01 1,000 A01 02 2,000 B02 テーブルB ID 名前 種別 01 test a 03 aiue b 上記のようなテーブルがあったとして テーブルAとテーブルBを外部結合し 紐づくレコードがあった場合、さらに 種別=a で検索を行いたいのですが 書き方がよくわかりません。 外部結合で検索し、紐づくレコードがあった場合に さらに検索条件を絞る場合には どう書いたらいいのですか? よろしくお願いします。

  • MYSQLで表の結合と検索

    分かりやすくするために、テーブル名などは日本語で書きます。 曲名テーブルのアーティストはアーティストテーブルの番号から参照していて、 さらに、アーティストテーブルのアーティストは名前テーブルの番号から参照しています。 この場合に、曲名テーブルのアーティストを検索(例えば:「大塚愛」と検索)したいのですが、 検索してみても、なかなかピンとくる答えがありませんでした。 JOINで結合いいかと思いますが、テーブルから参照、さらにそのテーブルは、また別のテーブルから参照。 この様な場合はどうクエリーを書いたらいいか全くわかりません。 詳しい方宜しくお願いします。 現在、検証出来る環境がありません。 where 曲名 like '%大塚愛%'" 曲名テーブル +---------------+---------------+---------------+ |................[番号]............|................[曲名]............|.......[アーティスト].....| +---------------+---------------+---------------+ アーティストテーブル +---------------+---------------+ |................[番号]............|.......[アーティスト].....| +---------------+---------------+ 名前テーブル +---------------+---------------+---------------+ |................[番号]............|...............[名前]............|................[読み]............| +---------------+---------------+---------------+

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

    はじめまして。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についてほとんどわかりませんが、よろしくお願いします。

  • 3テーブル外部結合方法について

    3つのテーブルを外部結合したいのですが・・・、 こんがらがってしまいました。 A,B,Cの3テーブルがあり、A,B,Cの順に外部結合 (LEFT OUTER JOIN)したいのですが、 A,BのテーブルについてはWhere句の条件指定が 必要です。 Select From (Select AA.a From A AA Where b = xxxx) BB Left Outer Join (Select CC.b From B CC Where c = eeee and BB.a = CC.b) On ???? こんな感じでつまづいてしまいました・・・

  • 外部結合で表示されないレコードがある

    いつもお世話になっております。 SQLで3つのテーブルの結合をして、結果を得たいのですが、 空欄があるために表示されないレコードがあります。 どうすれば表示できるか、どなたか教えていただけないでしょうか? テーブルが A:明細(call_data) B:業者(m_price) C:料金(m_cust) とあり、 SELECT c.area_id, m.cust_id, p.price FROM call_data c, m_cust m, m_price p where c.calling_num = m.orig_opn_dgt(+) and m.cust_id = p.cust_id and p.area_id = c.area_id(+) ; としたのですが、A.明細データのarea_idで空欄のレコードは 出力されませんでした。 (+)を使うと外部結合で片方のデータを出力できると思ったのですが、それができないのは何が原因なのでしょうか? c_id a_id price 1 111 10.2 2 222 15.5 3 333 20 1 4 111 10.25 2 111 13.5 5 222 12 6 888 6 666 17.55 と出て欲しいところが c_id a_id price 1 111 10.2 2 222 15.5 3 333 20 4 111 10.25 2 111 13.5 5 222 12 6 666 17.55 とでます。 分かりづらくて申し訳ありません。 よろしくお願いいたします。

  • mysql内データ検索結果の表示順について

    mysql内のデータを条件検索する時、検索結果の表示順を指定します。 新着順(id降順)で指定する場合のエラーについてアドバイスをいただけないでしょうか。 例えば、DB内データを降順で全件表示する場合は、 $query = "SELECT * FROM テーブル名 ORDER BY id DESC"; とすることでできると思います。 そこで、条件検索で結果表示をする場合は、上記の通りにしてもエラーが発生します。これについてのコードは以下のような感じです。 $query = "SELECT * FROM テーブル名 ORDER BY id DESC"; $where = array(); if (isset($_GET['area'])and($_GET['area'] !== '')) { $where[] = sprintf("(area='%s')", mysql_real_escape_string($_GET['area'])); } if (count($where) <> 0) { $query .= ' where ' . implode(' and ', $where); } これは、ORDER BY id DESCを書く位置が悪いのでしょうか? order by句は$query = select ~~~のあとに付けるという認識だったのですが、場合によって間違いとなるということなのでしょうか。 アドバイスをいただければ幸いです。

    • 締切済み
    • PHP
  • mysql と php で、2テーブル結合の検索!

    mysql と php を勉強しはじめで、解からないので、どなたか教えてください! 2テーブルあります。( 例 ’name’ と ’jusyo’ テーブルです。) ’name’テーブルは、NO int、IC_NO char(5)、NAME char(18)、 ・・・・・です。 ’jusyo’テーブルは、NO int、NAME_KANA char(30)、TEL char(6)、JUSYO char(50)、 ・・・・です。 この2テーブルを、《NO int、》で、左結合(レフトジョイン)させます。 テキスト入力フィールド、があり、検索ボタンで検索させようと思っています。 テキスト入力フィールドには、IC_NO を入力し、’jusyo’テーブルの、NAME_KANA TEL JUSYO・・・ を表示させたいと思っています。 <?php extract($_POST); echo " <form action=\"kensaku2.php\" method=\"post\" > <p>検索番号 : <input type=\"text\" name=\"nam\" value=\"$nam\" size=\"10\">   <input type=\"submit\" value=\"検索\"></p>\n </form> "; if($nam<>''){ mysql_connect('localhost','root','******'); mysql_select_db('データベース名'); $sql= "select * from name left join jusho on NO=NO"; $sql= "select * from name where IC_NO like '%$nam%'"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ echo "<p>該当データがありません。</p>\n"; } else { while($row = mysql_fetch_array($result)){ echo "詳細情報"; echo "<br />\n"; echo "<br />\n"; echo "インター名 : "; echo $row["NAME_KANA"]; echo "     "; echo "<p>";               ↓ としてますが、NAME_KANAが表示されません、どこが間違っていますか? 考え方がおかしいのでしょうか?

  • 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
  • SQLのWHERE句について

    初級シスアドを勉強しています。 テキストに、 SELECT 顧客ID,顧客名 FROM 顧客,注文 WEHRE 注文.顧客ID = 顧客.顧客ID AND 商品ID =’S01’ OR 商品ID =’S02’ の説明として「顧客」表と「注文」表を「顧客ID」をキーとして 結合し、「商品ID」がS01かS02である行が選択されると あります。 結合条件と「=01」がANDでむすばれている と考えると、ORに続く「=S02」は、結合句とは別に 計算されてしまうのではないかと思うのです。 OR のあとにも結合条件の句は有効なのでしょうか?

  • 複数のテーブルを外部結合する

    複数のテーブルを外部結合してSUMをとってきたいとき、SQLServerではどのような結合にすればよいのでしょう。 一対一の関係なら「LEFT JOIN」を使って「FROM テーブルA LEFT JOIN テーブルB ON テーブルA.フィールド = テーブルB.フィールド」ができますが、一対複数の関係で書き方がよくわからず、かなり困っています。 例) ユーザーマスター ・ユーザーID ・ユーザー氏名 ○月売上テーブル←○には1~12が入る ・ユーザーID ・売上金額 欲しいデータは ・ユーザーID ・ユーザー氏名 ・SUM(1月売上テーブル.売上金額) 1月 ・SUM(2月売上テーブル.売上金額) 2月 ・SUM(3月売上テーブル.売上金額) 3月 以降、12月まで続く ORACLEだと↓のやり方で、 ・ユーザーマスターはすべて ・各月の売上テーブルはユーザーID毎に集計(外部結合) を出力してくれるのですが…。 SELECT u.ユーザーID,u.ユーザー氏名, SUM(m1.売上金額),SUM(m2.売上金額),SUM(m3.売上金額),,, FROM ユーザーマスター u, 1月売上テーブル m1, 2月売上テーブル m2, 3月売上テーブル m3,,, WHERE u.ユーザーID=m1.ユーザーID(+) AND u.ユーザーID=m2.ユーザーID(+) AND u.ユーザーID=m3.ユーザーID(+),,, GROUP BY u.ユーザーID,u.ユーザー氏名 ORDER BY u.ユーザーID,u.ユーザー氏名