SQLについて教えてください



table1(ID、名前)

id,name
1,田中太郎
2,山本次郎
3,鈴木三郎
4,田中四郎

table2(ID、行った国、回数)

id,country,count
1,アメリカ,2
2,イギリス,1
1,カナダ,4
3,オーストラリア,1
4,カナダ,1
2,フランス,2
3,中国,1
4,スイス,2

上記の2つのテーブルから
名前を「田中」で検索した際に、
下記のような結果を得るにはSQLを
どのように書けばよろしいのでしょうか。

1,田中太郎,アメリカ:2、カナダ:4
4,田中四郎,カナダ:1、スイス:2


よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/12/22 23:32:17
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:pyopyopyo No.1

回答回数377ベストアンサー獲得回数98

ポイント60pt

必要な情報は以下のSQLで取り出せます

select A.id, A.name, B.country, B.count 
  from table1 as A, table2 as B 
  where A.id = B.id

出力形式を カナダ:1、スイス:2 のようにする変換は

SQLではなくプログラム言語で書いた方が早いと思います.

id:worldtravel

ありがとうございます。

できました。

ところで、このままですと、仮に最初の30件目までを取得したい場合、

(LIMIT 0 , 30 とすると)

一人で30カ国行ったデータがあるとそれで埋まってしまいます。

そうではなく、最初の30人分を取得するにはどうすればよろしいでしょうか。

SQLだけでは難しいでしょうか。

よろしくお願いします。

あっ すいません。 MySQL.4.0.xです

2007/12/22 14:01:23
  • id:b-wind
    DB にもよるが、基本的には無理なことが多い。
    SQL を発行しているプログラムのほうで何とかするしか。
  • id:worldtravel
    b-windさんいつもありがとうございます。

    無理な事が多いと言うのはテーブルをもっと分けるとか、
    必要なデータをまとめておく方が良いと言う事でしょうか。

    よろしければ回答欄へお願いします。
  • id:pyopyopyo
    > 仮に最初の30件目までを取得したい場合、

    それは,最初の30人分ってことですね.

    select A.id, A.name, B.country, B.count
    from table1 as A, table2 as B
    where A.id = B.id and A.id<30

    と 検索件数を limit で制限するのではなく, id の範囲で制限すればよいと思います.
  • id:worldtravel
    ありがとうございました。

    うまくいきました。

    が、激重なので別の方法を考える事にしました。


    方法自体は今後に生かせますので、教えていただいて良かったです。
    ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません