• ベストアンサー

複数テーブルにわたるCOUNT

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

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

  • ベストアンサー
回答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を表現してくれるので理解が早いと思いますよ。

hyengi
質問者

お礼

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

その他の回答 (1)

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

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