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

Oracle上の2つのテーブルからの条件でマッチする件数をSQLで作成しています。

内容としては、テーブルAの区分=1 かつ テーブルBの種別がスペースの件数です。
テーブルAの該当するデータは10件中3件、テーブルBの該当するデータは50件中15件で、本来両方がマッチするのは2件です。

SELECT COUNT(*) FROM テーブルA,テーブルB WHERE テーブルA.区分 = '1' AND テーブルB.種別 = ' ' ;

上記のSQL文で件数をカウントしたのですが、どうも結果では30件とカウントされてしまいます。
なんとか2件として結果を出したく、参考資料を調べているところなのですが、今のところ参考になる文献が見つからず悩んでます。もし簡単にカウントできるSQLがあったり、分かる方がいれば手助けして頂きたいと思い、今回投稿しますのでご教授賜りたく思います。よろしくお願いします。

A 回答 (2件)

テスト環境が手元にあるようなら実際に試した方が話が早いでしょう。



SELECT COUNT(*)
FROM テーブルA,テーブルB
WHERE テーブルA.会社CD = テーブルB.会社CD
AND テーブルA.型式CD = テーブルB.型式CD
AND テーブルA.区分 = '1'
AND テーブルB.種別 = ' ' ;
    • good
    • 0
この回答へのお礼

今朝テストしてみて、問題なく件数カウントできました。
複数テーブルでの仕掛けは初めてだったのですが、参考になりました。
今後も使えそうなツールですので、有効活用させていただきます。
また分からないことありましたら、ぜひともご教授よろしくお願いします。
ありがとうございました。

お礼日時:2011/07/08 09:12

テーブルAの行とテーブルBの行を結合していません。



SELECT COUNT(*)
FROM テーブルA,テーブルB
WHERE テーブルA.ある属性 = テーブルB.ある属性
AND テーブルA.区分 = '1'
AND テーブルB.種別 = ' ' ;

あるいは

SELECT COUNT(*)
FROM テーブルA JOIN テーブルB ON テーブルA.ある属性 = テーブルB.ある属性
WHERE テーブルA.区分 = '1'
AND テーブルB.種別 = ' ' ;

のようになるでしょう。

この回答への補足

早速回答して頂き、ありがとうございました。


結合部の WHERE テーブルA.ある属性 = テーブルB.ある属性 ですが、
キーとなる項目が会社CD+型式CDのセットでしているのですが、
データでは分割管理されています。
テーブルAが、会社CD,型式CD,区分,・・・、
テーブルBが会社CD,型式CD,種別,・・・といった感じです。

この場合、 WHERE テーブルA.ある属性 = テーブルB.ある属性 のところは、
会社CDと型式CDをAND条件で指定することは可能なのでしょうか?

初歩的な質問になって申し訳ありませんが、可能でしたら教えてください。
よろしくお願いします。

補足日時:2011/07/07 18:08
    • good
    • 0

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