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

複数テーブルにわたるCOUNT

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

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

  • MySQL
  • 回答数2
  • 閲覧数13577
  • ありがとう数3

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

  • ベストアンサー
  • 回答No.1

SELECT Count(*) FROM テーブル1,テーブル2,テーブル3  WHERE (テーブル1.列1 Like 検索文字      or テーブル2.列2 Like 検索文字      or テーブル3.列2 Like 検索文字; 上記のSQLは、テーブル間の結合条件がない為、 結果、クロスジョインしてしまいます 〓例〓 テーブル1の総レコード数が5レコード テーブル2の総レコード数が5レコード テーブル3の総レコード数が5レコード の条件で以下のSQLを実行した場合 5×5×5=125件が検索されます SELECT A.A1,     B.A1,     C.A1 FROM    テーブル1 AS A,    テーブル2 AS B,    テーブル3 AS C 単純に条件に該当するレコード件数を求めたい 場合は副問い合わせを利用します 副問い合わせはOLACLE・SQLSaver・ACCESSの機能として実装されていますが、MySqlに機能が実装されているかどうかは、知らないので、確認してみて下さい ちなみに、副問い合わせの機能を利用して、レコード件数を調べたい場合は以下のようなSQLを作成します SELECT  (A.A_COUNT + B.B_COUNT + C.C_COUNT) AS SUM_COUNT FROM  (SELECT COUNT(*) AS A_COUNT   FROM テーブル1   WHERE 列名 Like '%文字列%') AS A,  (SELECT COUNT(*) AS B_COUNT   FROM テーブル2   WHERE 列名 Like '%文字列%') AS B,  (SELECT COUNT(*) AS C_COUNT   FROM テーブル3   WHERE 列名 Like '%文字列%') AS C MySqlで副問い合わせが利用出来ない 場合は、仕方無いですが3回に分けて 結果を求めるしかないですね 目的によっては内部結合を利用して 出来るかも知れませんがMySqlで利用可能 かどうか知らないので、これも確認して下さい SQLを基礎から覚えたい場合は ACCESSのJet-Sqlから始める事をお勧めします ACCESSのクエリという機能でビジュアル的に SQLを表現してくれるので理解が早いと思いますよ。

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

質問者からのお礼

ご回答ありがとうございます。 MySQLでも副問い合わせ・内部結合はできるようで、 副問い合わせをしたら無事解決しました。 本当にありがとうございました。感謝です! まだまだ初心者ですので、解らないことがあった時はよろしくお願いします。

その他の回答 (1)

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

SELECT @A_COUNT:=COUNT(*) FROM テーブル1 WHERE 列名 Like '%文字列%'); SELECT @B_COUNT:=COUNT(*) FROM テーブル2 WHERE 列名 Like '%文字列%'); SELECT @C_COUNT:=COUNT(*) FROM テーブル3 WHERE 列名 Like '%文字列%'); SELECT @A_COUNT + @B_COUNT + @C_COUNT);

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

関連するQ&A

  • 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つ)のテーブルで検索を行いたい

    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
  • phpMyadminとPHP上からの違い?

    おせわになります よろしくお願いします SELECT COUNT(*) FROM テーブル名 WHERE dee = 0 AND Fee LIKE '%文字%' というSQL文があり、 phpMyadmin上からSQLを実行すると 4と表示されるのですが PHPから $sql = "SELECT COUNT(*) FROM テーブル名 WHERE dee = 0 AND Fee LIKE '%文字%'"; $result = mysql_query($sql,$conn); $row = mysql_fetch_row($result); とすると0、$row[0]は0となります 特にエラーの表示もなく データベースへの接続も問題ないようなのですが 原因がわかるかたいらっしゃいましたら 教えて下さい 以上よろしくお願いします

    • ベストアンサー
    • PHP
  • mysqlに格納したエクセルファイルの、シート内の文字列を検索したいの

    mysqlに格納したエクセルファイルの、シート内の文字列を検索したいのですが上手くいきません。 半角英数の文字列なら、以下のSQL文で引っ張ってくることができました。 SELECT * FROM テーブル名 WHERE 列名 LIKE '%abc%'; mysqlのバージョンは5.1です。 検索はPHPで行おうと思っています。 どなたか知っている方いらっしゃいましたら、よろしくお願いします。

  • count(1)とcount(*)の違い

    初心者です。 以下のSQL文の違い及びcount(1)の1が何を表しているのか 教えて頂けないでしょうか? select count(*) from table select count(1) from table また、参考しやすいサイト等ありましたら教えて頂けないでしょうか?

  • COUNT(*)の使い方

    COUNT(*)の使い方が分からないので質問します。 直接のSQLでCOUNT(*)を使ってレコード数を表示させることはできましたが PHPでのSQLではCOUNT(*)をPHPのソースの変数に代入する方法が分かりません。 $sql = 'SELECT ip, COUNT(*) FROM webdb'; $ret = mysql_query($sql); $rowval = mysql_fetch_row($ret); この場合、$rowval[1] がテーブルwebdbのレコード数だと 思いましたが、間違っているところはございませんか?

    • ベストアンサー
    • MySQL
  • 複数のテーブルの レコード件数所得

    sql初心者です。 php sql4.1を使って テーブルA・テーブルBの総レコード件数を所得がうまくできません。 テーブルAの◇◇が○○の含むレコード件数を所得は SELECT count(*) FROM テーブルA WHERE ◇◇ LIKE ○○ でできました。 テーブルA・テーブルBの◇◇が○○の含むレコード件数を所得はどうすればいいのでしょうか? よろしくお願いいたします.

    • ベストアンサー
    • MySQL
  • MySQL WHERE句のLIKE検索

    初心者ですみません。 MySQL WHERE句のLIKE検索で、引っかかった文字列を 除いた項目を表示させるにはどうしたらいいでしょうか。 例えば、 SELECT * from [テーブル名] where [フィールド名] like '%あ%'; として、「あ」が入っているレコードを検索し、 該当しないレコードを表示させる。 どうか教えてください。よろしくお願いします。

  • 複雑なcountについて

    val | num ----------- 9984 | 1 1234 | 1 9876 | 1 4567 | 1 9984 | 1 1234 | 1 9984 | 1 以上のようなテーブルで SELECT COUNT(*) FROM table_name WHERE val = 9984 SELECT COUNT(*) FROM table_name WHERE val = 1234 SELECT COUNT(*) FROM table_name WHERE val = 9876 SELECT COUNT(*) FROM table_name WHERE val = 4567 のように4つ実行することなく1度に 9984 => 3 1234 => 2 9876 => 1 4567 => 1 という結果を得たいのですが方法はありますでしょうか? ご教示お願いいたします。

  • 複数テーブルの集計その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