• ベストアンサー

SQLでどうやったらできますか?

データベース初学者です。どうぞお知恵をお貸しください。 数百人ほどの名前がnameA列に並んでいるtableAと,数万人の名前がnameB列に並んでいるtableBがあります。tableA列の各行の名前が,テーブルBの中に何回出てくるか数えて,結果の数字をtableAの各行2列目(列名はnumber)に表示させたいと思っています。 SQLは初めて触るので,正直言って方法がまったく見当つきません。。どなたかお詳しい方,どうか宜しくご教示ください。

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

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

dbmsが何だか分からないから、一概に言えないけれど select tableA.nameA, count(*) as "number" from tableA join tableB on tableA.nameA=tableB.nameB group by tableA.nameA ・numerが予約語で使えない場合がある。 ・計算結果に別名をつけるときにasが必須だったり、逆にあるとエラーになったり ・同じく別名をつける時、ダブルクォーテーションでくくるのが雄幸だったり、エラーになったり、(ACCESSやSQL Serverは既定値では[]でくくる)。 ・joinはinnerがないとエラーになる場合あり。

Masa_98
質問者

お礼

簡潔に回答頂いてありがとうございます。大変参考になりました。 SQLはDBMSによってかなり方言があるんですね。細かく教えて頂いたのでうまくいきました。 本当にどうもありがとうございます。

その他の回答 (2)

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.3

No.1です。 nora1962さんの回答を拝見して自分の回答の間違いに気づきました。 >where tableA.nameA = tableB.nameB は on tableA.nameA=tableB.nameB です。すみません。

Masa_98
質問者

お礼

なんとかうまくできそうです。どうもありがとうございました。

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

tableAとtableBを結合し、count関数使って件数を取得します。 select nameA ,count(*) as "number" --as で列別名を付けます。numberというのは予約語だったりするので""でくくる必要があるかもしれません from tableA --tableBにtableAの各nameAが必ず1件は存在するのなら、inner join でいいです --outer join との違いはご自身で調べてみてください left outer join tableB where tableA.nameA = tableB.nameB group by nameA; データベースについて質問する際は、対象のデータベース製品名とバージョンを記載したほうがいいです。 (Oracle11g や SQL Server 2008 R2 など) データベース製品やバージョンによって、使える関数だったり記述方法が違うこともありますので。

Masa_98
質問者

お礼

お礼が遅れてしまい申し訳ありません。 DBMSはMySQL5.2を使っています。 大変参考になりました。ありがとうございました。

関連するQ&A