複数テーブルでの件数検索について

このQ&Aのポイント
  • Oracle上の2つのテーブルからの条件でマッチする件数をSQLで作成しています。
  • テーブルAの区分=1かつテーブルBの種別がスペースの件数をカウントするSQL文を実行しています。
  • 結果では30件とカウントされてしまい、本来は2件のマッチするはずです。簡単にカウントできるSQLや参考文献が見つからず悩んでいます。
回答を見る
  • ベストアンサー

複数テーブルでの件数検索について

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があったり、分かる方がいれば手助けして頂きたいと思い、今回投稿しますのでご教授賜りたく思います。よろしくお願いします。

  • NH599
  • お礼率50% (2/4)
  • Oracle
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

テスト環境が手元にあるようなら実際に試した方が話が早いでしょう。 SELECT COUNT(*) FROM テーブルA,テーブルB WHERE テーブルA.会社CD = テーブルB.会社CD AND テーブルA.型式CD = テーブルB.型式CD AND テーブルA.区分 = '1' AND テーブルB.種別 = ' ' ;

NH599
質問者

お礼

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

その他の回答 (1)

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.1

テーブル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.種別 = ' ' ; のようになるでしょう。

NH599
質問者

補足

早速回答して頂き、ありがとうございました。 結合部の WHERE テーブルA.ある属性 = テーブルB.ある属性 ですが、 キーとなる項目が会社CD+型式CDのセットでしているのですが、 データでは分割管理されています。 テーブルAが、会社CD,型式CD,区分,・・・、 テーブルBが会社CD,型式CD,種別,・・・といった感じです。 この場合、 WHERE テーブルA.ある属性 = テーブルB.ある属性 のところは、 会社CDと型式CDをAND条件で指定することは可能なのでしょうか? 初歩的な質問になって申し訳ありませんが、可能でしたら教えてください。 よろしくお願いします。

関連するQ&A

  • 複数のテーブルの レコード件数所得

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

    • ベストアンサー
    • MySQL
  • オラクルのSQLで複数テーブルの一括件数取得

    テーブルAとテーブルBがあって、それぞれに 項目Aがあり、 その項目Aが 0の件数を取得したのいですが、高速化のため 1度のSQLで 取得したいのです。 どのようにすればいいでしょうか? 例 テーブルAの項目A 0 1 2 0 テーブルBの項目A 1 0 0 2 0 この場合、テーブルAが 2件で テーブルBが 3件となります。 それぞれ別々に取得するやり方は わかります。 それぞれ別々に取得する(2回する)のを1回で取得するようにすれば 少しは 速くなるのでは ないのかと思いすが、 いかに取得したら 速くなるのか 教えてください。

  • SQLで、Join句で結合したテーブルにデータが無い場合について

    SQLについての質問です。 Join句を使ってテーブルを結合しています。 Aテーブル(社員データ)に存在する勤務区分フィールドの値に対応して、 Bテーブル(勤務データ)から勤務区分(一意)に対応したデータを持って来るSQLを作成したところ、 Bテーブルに存在しない勤務区分を持つAテーブルのデータは結果に出ませんでした。 このように、結合したBテーブルに対応するデータが無い場合でも、Aテーブルに存在するデータを全て出したい場合、 何か方法はあるのでしょうか? 現在は一度Aテーブルから全てのデータをセレクトした後に、1件1件ループしてBテーブルからセレクトする方法をしていますがもっと簡潔にできるなら簡潔にしたいと思っています。 どなたかお答え頂けると幸いです。よろしくお願いします。

  • Accessのテーブルの結合

    AのテーブルとBのテーブルがあります。各テーブルにナンバリングの項目を設定したとして、そのナンバリングをもとにAとBのテーブルを結合したいのですが、どのようにしたらいいのでしょうか?結果的にAの1とBの1を1データとして出したいのですが・・・。データ件数は各60件ほどです。よろしくお願いします.

  • SQL文で他テーブルの件数も同時に求めたい

    SQL文について教えてください。(DBはSQLサーバー2000です。) 以下のように2つのテーブルがあります。Aテーブルのフィールド項目の抽出と、AテーブルのIDフィールドと同じ値のBテーブルの件数を同時に抽出したいのですが、どのように書いてよいか分かりません。恐れ入りますが、教えていただけないでしょうか? テーブルA  ID name Age -------------- 1  太郎 20 2  二郎 35 3 花子 26 テーブルB ID memo ------------------ 1  私は男です 1  東京に住んでます 2  友達が3人います 3 私は彼氏がいます 3  先日TDLに出かけました。 3  ランチはカレーでした。 要約すると、Aテーブルの全情報とテーブルBの件数を同時に抽出したいのです。以下のようなイメージです。 name Age テーブルB件数 ------------------- 太郎、20、 2 二郎、35、 1 花子、26、 3 よろしくお願い致します。

  • ピボットテーブルでの複数項目の集計方法について

    お世話になります。 下記のようなデータがあります 氏名  金額  区分 あ   100   A い   110   B う   140   A え   100   C お   130   C 区分ごとの金額の合計(Aの合計金額、Bの合計金額・・・)と区分ごとの件数の数(Aの合計件数、Bの合計件数・・・)を出したく、 私は下記のような方法でピボットテーブルを作成したのですが ページエリア 区分 行エリア   氏名 データエリア   金額 データエリア   金額  (フィールドの設定でデータの個数に変更)  いちいちデータエリアに「データの個数 / 金額2  1」「データの個数 / 金額2  1」・・・とでてくるのが邪魔です。 これを消す方法はないでしょうか? 個数に関しては、全体の個数のみ下に表示されればいいのですが または、違った方法で作ったほうがいいのでしょうか? 集計機能ならば作れるのですが、データの更新ができない、ページごとにシートを分けられない・・・など不便なのでピボットテーブルでうまく出来ないかと・・・。 よろしくおねがいします。

  • ORACLEでの件数カウント方法

    素人なので教えてください。sqlplusでレコード件数をカウントしたいのですが、チョット特殊なカウント方法なのです。やりたいことは、一回のSQL文で複数カラムのレコード件数をカウントしたいのですが可能でしょうか? 例) a_cdの件数カウントの場合は、 select a_cd,count(*) from abc group by a_cd; で b_cdの件数カウントの場合は、 select b_cd,count(*) from abc group by b_cd; これを一回のSQLで、 a_cdとb_cdの件数をカウント出来ますか?

  • 複数テーブルの結合

    マスターテーブル1つと、子テーブルが複数存在して子テーブルにはマスターテーブルのidを格納するフィールドがあり参照しなくなったときにはそのidを消去するといったデータベースがあったときにマスターIDごとに子テーブルのどれか1つでも参照していればカウントするみたいなSQLをつくりたいんですが select count(m.id) from master m inner join a on m.id = a.m_id inner join b on m.id = b.m_id inner join c on m.id = c.m_id group by m.id みたいなSQLだとAにデータが存在しなければB以降に存在しても期待した結果が出力されません。A、B、Cいずれかのm_idとマスター側のIDが等しければカウントするという出力をするためにはどのように書けばいいんでしょうか。 わかりづらい説明で申し訳ありませんがよろしくお願いします。

    • ベストアンサー
    • MySQL
  • Accessでグループ化した結果フィールドをつなげるには?

    Accessでグループ化した結果フィールドをつなげるには? Access2003で 区分/コード A/123 A/456 A/789 B/234 B/567 というテーブルがあり、グループ化すると、区分Aのコードは123、456、789、 区分Bのコードは234、567と表示や印刷することはできます。 (たとえば、フォームやレポートのサブフォームなどに各コードを表示することはできます) これを、 フィールド1/フィールド2 A/123456789 B/234567 というふうにコード部分を1つのフィールドにつなげることは可能でしょうか? 上記のように、区分Aのデータ件数は3件、区分Bは2件というように コードのデータ件数はまちまちですが、それに対応してつなげたいと考えております。 よろしくお願いいたします。

  • 複数テーブルの結合

    テーブルA  a_id id a_data a_date ----------- テーブルB id b_data b_date テーブルC id c_data c_date ----------- テーブルAとテーブルBは「id」がキーで1:N(Nは0も含む) テーブルAとテーブルCは「id」がキーで1:N(Nは0も含む) このような3のテーブルで a_idを検索キーにして次のフィールドのデータを抽出したいのですが。。。 ※テーブルCのc_dateを降順で先頭の1レコードのみ ※テーブルBのidをカウントする selectの結果(イメージ) id a_data a_date count(B.id) c_date ------------------------------------- 001 AAAA 2007/02/01 20 2007/02/14 005 BBBB 2007/02/02 0 2007/02/10 006 CCCC 2007/02/02 0 2007/01/08 003 DDDD 2007/02/01 100 002 EEEE 2007/02/01 9 004 FFFF 2007/02/01 0 よろしくお願いします