アプリ版:「スタンプのみでお礼する」機能のリリースについて

複数のテーブルで検索条件が当てはまった行を検索し、
その総行数を得たいのですが、
以下のSQL文ではあさっての数値が出てしまいます。
構文が間違っているのでしょうか。
(MySQLを使っています)

SELECT Count(*) FROM テーブル1,テーブル2,テーブル3
 WHERE (テーブル1.列1 Like 検索文字
     or テーブル2.列2 Like 検索文字
     or テーブル3.列2 Like 検索文字;

どなたか教えてください。よろしくお願いします。

A 回答 (2件)

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を表現してくれるので理解が早いと思いますよ。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

MySQLでも副問い合わせ・内部結合はできるようで、
副問い合わせをしたら無事解決しました。
本当にありがとうございました。感謝です!

まだまだ初心者ですので、解らないことがあった時はよろしくお願いします。

お礼日時:2006/04/24 02:23

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);
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A