• ベストアンサー
  • 困ってます

複数(2つ)のテーブルで検索を行いたい

MySQL 3.23です。 select count(*) as hit from freedata where (A=10 or B=10); という構文と select count(*) as hit from sharedata where A=10; という構文を一行にしたOR検索を行いたいのですが、方法はありますか? 要は、同一のキーワードで、二つのテーブルを検索対象にしたいのです。ご教授よろしくお願い致します。

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

  • MySQL
  • 回答数2
  • 閲覧数61
  • ありがとう数1

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

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

つまり、freedataとsharedataは同じ構造のテーブルということですね? 3.23系はUNIONが動かないようなので、 テンポラリに流し込んで表示することになりますね。 freedataテーブル A  B  C 1  1  1 2  2  2 5  10  3 sharedataテーブル A  B  C 3  3  3 4  4  4 10 12  7 結果 A  B  C 5  10  3 10 12  7 CREATE TEMPORARY TABLE `temp_amount`(`A` INT,`B` INT,`C` INT); INSERT INTO `temp_amount` SELECT `A`,`B`,`C` FROM `freedata` WHERE 10 IN (`A`,`B`,`C`); INSERT INTO `temp_amount` SELECT `A`,`B`,`C` FROM `sharedata` WHERE 10 IN (`A`,`B`,`C`); SELECT `A`,`B`,`C` FROM `temp_amount`;

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

質問者からのお礼

確かに3.23系だとunionが動かないのでちょっと回り道になってしまいましたね(汗)。 どうもご回答ありがとうございました。

その他の回答 (1)

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

どのようなデータからどのような結果を希望しているかによりますね。 freedataとsharedataの関連がわからない限り、 結果表示がぼろぼろになりますよー

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

質問者からの補足

■freedataテーブル A列の値 5 B列の値 10 C列の値 3 ■sharedataテーブル A列の値 10 B列の値 12 C列の値 7 こういうデータがあって、 キーワード「10」を検索した時、数値10を示しているのが何件あるかを表示させたい、という感じです。上の例では2件です。

関連するQ&A

  • 複数テーブルにわたるCOUNT

    複数のテーブルで検索条件が当てはまった行を検索し、 その総行数を得たいのですが、 以下のSQL文ではあさっての数値が出てしまいます。 構文が間違っているのでしょうか。 (MySQLを使っています) SELECT Count(*) FROM テーブル1,テーブル2,テーブル3  WHERE (テーブル1.列1 Like 検索文字      or テーブル2.列2 Like 検索文字      or テーブル3.列2 Like 検索文字; どなたか教えてください。よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 複数テーブルからLIKE検索を行いたいのですが、う

    複数テーブルからLIKE検索を行いたいのですが、うまくいかないので教えてください ■やりたいこと ・一つのキーワードで、MAINテーブル「hoge」カラムと、SUBテーブル「hoge」カラムを検索して、該当したレコードを表示したい ■テーブル構成 ・MAIN … 「id」「main1」「hoge」… ・SUB… 「sub_id」「main_id」「sub1」「hoge」… ・1つの「id」に対して、対応する「sub_id」が複数(「id」1は一つだけ。対応する「sub_id」1は複数あります) ■試したこと1 SELECT a.* , r.* FROM main a LEFT JOIN sub r ON a.id = r.main_id WHERE ( a.hoge LIKE '%キーワード%' OR r.hoge LIKE '%キーワード%' ) とやると、2件ヒットするはずなのに、1レコードしか取得できません(1レコードに「hoge」カラムが2つ入ります) ■試したこと2 SELECT a.* , r.hoge as rhoge FROM main a LEFT JOIN sub r ON a.id = r.main_id WHERE ( a.hoge LIKE '%キーワード%' OR r.hoge LIKE '%キーワード%' ) とやると、2件ヒットするはずなのに、1レコードしか取得できません(1レコードに「hoge」と「rhoge」カラムになります) ■試したこと3 FROMで2箇所指定するのかと思ったのですが、 SELECT a.* , r.* FROM (main a,sub r) LEFT JOIN r ON a.id = r.main_id WHERE ( a.hoge LIKE '%キーワード%' OR r.hoge LIKE '%キーワード%' ) 結果は、#1066 - Not unique table/alias: 'r'になります ■試したこと4 LEFT JOINがいらないのかと思い、削除したら、2件ヒットするはずなのに、たくさんヒットしてしまいます ■質問 欲しいのは、キーワード検索した際、該当カラムにヒットした数だけのレコードなのですが、どうすれば良いのでしょうか? ■例 ・東京で検索 ・MAINテーブル「hoge」カラム(2レコード)で2ヒット ・SUBテーブル「hoge」カラム(3レコード)で3ヒット ・ヒットした該当5レコードを取得したい

    • ベストアンサー
    • MySQL
  • MySQL: 複数テーブルのcount

    複数テーブルの総行数(count値)を取得したいのですが、下記だとテーブルA,B,Cの結果が バラバラに出力されてしまいます。 【入力条件】 mysql> select COUNT(*) AS 列ID from テーブルA      union all      select COUNT(*) AS 列ID from テーブルB      union all      select COUNT(*) AS 列ID from テーブルC; 【出力結果】       +-----+       | 列_ID |       +-----+       |  1  | ←テーブルAの合計:行数       |  2  | ←テーブルBの合計:行数       |  3  | ←テーブルCの合計:行数       +-----+ 総行数:6を一発で取得するには、どのようにしたらよろしいのでしょうか? 大変恐縮ですが、ご教授よろしくお願いいたいます。 <<MySQLのverは5,5です。

    • ベストアンサー
    • MySQL
  • 複数テーブルの集計その2

    お世話になります。 先日テーブルの集計について教えていただき、下記集計結果を取得することができたのですが、 新たに自由形50~平泳ぎ50までの合計を追加したいのです。(一人で4種目参加する場合は4と数える) テーブル1 AreaID   AreaName --------------------- 1 北海道 2 東北 テーブル3 ID AreaID   Name  Item1   Item2  Item3 Item4 --------------------------------------------------------- 1   2    鈴木    2    1    4     3 2   1    田中    1    2    null   null 3   2    伊藤    3    null   2    4  「集計結果」       参加人数 自由形50 自由形100 背泳ぎ50 平泳ぎ50  追加部分 --------------------------------------------------------------- 北海道     1     1       1      0      0       2 東北      2     1       2      2      2       7   $sql="select AreaName, count(distinct ID) 参加人数, count(case when Item=1 then 1 else null end) as 自由形50, ・・・略 from t1 as x left join (select ID,AreaID,1 as Item from t3 where Item1=1 or Item2=1 or Item3=1 or Item4=1 union all select ID,AreaID,2 as Item from t3 where Item1=2 or Item2=2 or Item3=2 or Item4=2 ) as y on x.AreaID=y.AreaID group by AreaName order by x.AreaID というようにおしえていただきました。 null以外を取得するSQLをカウントとselectに追加すればいいのかと思い試したのですが期待した値を取得できません。 count(case when Item=AAA then 1 else null end) as abc,と union all select ID,AreaID,AAA as Item from テーブル3 where ItemID1<>'' or ItemID2<>'' or ItemID3<>'' or ItemID4<>'' or (ItemID1<>'' and ItemID2<>'') ・・・ バージョンはMySQL4.1.18です。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • 複数のテーブルから同じ条件で検索したい。

    例えば、テーブルがA,B,C,Dとあって、レイアウトはそれぞれ違います。 ですが、全てのテーブルに共通の項目もあります。 共通項目名:FLG このような前提で、 A,B,C,Dのデータを同じ検索条件で全ての内容を表示させたいのですができませんか? ベタに書くと select * from A where FLG='2'; select * from B where FLG='2'; select * from C where FLG='2'; select * from D where FLG='2'; と言う感じで結果を表示させたいのです。 実際にはテーブル名がものすごい数なので、ベタに書きたくないので、この部分をtab テーブルのtnameとかを使っていっぺんに検索結果が出せればありがたいのですけが・・・ こういうのはシェルとか使わないとだめですかね?(DBはオラクルです。)

  • 年齢分布テーブルの再集計SQL

    テーブルA 年齢,人数 20,15 21,11 22,26 .... 30,5 31,88 ... 60,5 上記テーブルAからのSQLで下記のデータが欲しいと思っております。 【欲しい結果】 年齢範囲,人数 20~24,50 25~29,33 30~34,199 ... ただし、 select '20~24'as 年齢範囲,count(*)as 人数 from テーブルA where 条件1 union select '25~29'as 年齢範囲,count(*)as 人数 from テーブルA where 条件2 union select '30~34'as 年齢範囲,count(*)as 人数 from テーブルA where 条件3 ... というSQLは使いたくないです。(テーブルAの記述が長めなので、同じものを複数記述したくないのです) また結果が 項目名:20~24,25~29,30~34,... レコード:50,33,199,... というのも遠慮したいです。 CASE文やsum、groupを使えば、できそうな気がするのですが、、、 ご教授お願い致します。

  • WITH句で複数テーブルを定義する方法

    WITH句で複数テーブルを定義する方法を知りたいです。 どこかのサイトで、複数テーブルを定義するには、以下のような 方法にて実現できる旨の記事を目にしました。(withでの宣言テーブル間を「,」で区切る)ですが、「'.' 付近に不適切な構文があります。 」のようにエラーがメッセージ欄に表示されます。 ------------------------------------------------------------ WITH a (code, cnt) as ( select code, count(*) from abc where a is null group by documentcode), b (ttr.documentcode, cnt) as ( select ttr.documentcode, count(*) from abc tr inner join def ttr with(nolock) on tr.seqno = ttr.seqno where SendTime is null group by documentcode ) select * from a cross join b; ------------------------------------------------------------ ご存知の方でコメント頂ける方、お手数お掛けしますが、 宜しければ教えて下さい。

  • 行数の取得

    mysql初心者です 行数を取得したいです 処理をすこしでも軽くしたいです このように書くとテーブルの中身は見に行かないらしいのですが SELECT COUNT(*) AS cnt FROM bbs WHEREをつけると中身を見に行きますか? SELECT COUNT(*) AS cnt FROM bbs WHERE sure_id=5 中身を見に行く場合、カラムを指定したほうが早いでしょうか? SELECT COUNT(id) AS cnt FROM bbs WHERE sure_id=5 よろしくお願いします

    • ベストアンサー
    • MySQL
  • 【PHP】複数語検索について

    お世話になります。 PHPにて複数語検索を行いたいのですが、うまく検索できずに困っています。 テーブル名はinformation、 レコード名はnameとして、スペース区切りで検索します。 $st = $db->prepare("SELECT * FROM information"); $where = array(); if($arr['name']){ $name_ary = explode(" ", $name); $name_count = count($name_ary); $where = ""; for( $i = 0; $i < $name_count; $i++ ){ if( $i != 0 ){ $where = ($where . " or"); } $where = $where . " name LIKE '%{$name_ary[$i]}%'"; } } $query= sprintf("SELECT * FROM information WHERE $where"); $st = $db->prepare($query); どなたかご教授いただけないでしょうか? 他の質問など見て真似たり、下記サイトを参考にしたりしているのですが、 うまくいかず困っております。 http://blog.olivesystem.com/824.html 何卒宜しくお願い致します。

    • 締切済み
    • PHP
  • サブクエリ

    サブクエリで、t2テーブルに列が無いか、t2テーブルの中でuflgの値が1である列がヒットする場合に真を返すなら、 where ... and 0=(select count(*) from t2) or 0<(select count(*) from t2 where uflg=1) のようにサブクエリに2つのselectを書かないと無理ですか?