mySQLで友人とのポイント比較

このQ&Aのポイント
  • mySQLを使用して友人とのポイント比較を行いたい場合、以下の手順で実施します。まず、tableAとtableBの関連付けを行います。次に、tableAのID_AとtableBのID_Bを比較し、一致する場合に結果を表示します。また、友人リストのf1~f5も比較対象に含めます。具体的なSQLクエリの例も掲載しています。
  • 上記の要件を満たすために、SELECT文を使用してtableAとtableBを結合し、条件に合致するレコードのみを抽出します。ID_AとID_Bの一致、およびf1~f5のいずれかとの一致を確認します。さらに、ID_Bの値を指定して特定のユーザーの結果のみを表示します。
  • 例えば、ID_Bが'suzuki'の場合、鈴木さんのポイントと友人のポイントを表示することができます。また、ID_Bが'yokota'の場合、横田さんのポイントと友人のポイントを表示することができます。このように、任意のID_Bに対してポイント比較を行うことが可能です。
回答を見る
  • ベストアンサー

mySQLで友人とのポイント比較

下記のようなテーブルがあります。 【tableA】 tableAは、各ユーザーが友人として登録しているリストです。 ID_A が本人名、f1~f5 が友人登録リストです。 鈴木さんは、友人として「横田さん、小森さん、原さん」の3人を登録していることになります。 【tableB】 tableBは各人が保有しているポイントです。 この2つから、「自分及び登録した友人とのポイント比較画面」を作りたいと思っています。 ************************************ tableA ID_A f1 f2 f3 f4 f5 suzuki yokota komori seki yokota komori hara yokota hara seki komori hara seki komori hara ************************************* tableB ID_B point suzuki 550 yokota 400 hara 250 komori 350 seki 600 honda 520 ************************************* やりたいこと IDをベースに自分、及び友人の点数を羅列させたい 欲しい結果 tableB.ID_B = 'suzuki' の場合 suzuki 550 yokota 400 komori 350 seki 600 tableB.ID_B = 'yokota' の場合 yokota 400 komori 350 上記のSQLを組むことができません。 お知恵を拝借したくお願い申し上げます。 当方が組んだSQLです。膨大な羅列が返ってきました。(汗) SELECT tableB.ID_B,tableB.point from tableA,tableB WHERE (tableA.ID_A=tableB.ID_B or tableA.ID_A=tableB.f1 or tableA.ID_A=tableB.f2 or tableA.ID_A=tableB.f3 or tableA.ID_A=tableB.f4 or tableA.ID_A=tableB.f5) and AND tableB.ID_B = 'suzuki' 宜しくお願い致します。

  • MySQL
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
回答No.1

select ID_B,point from tableB where exists(select ' ' from tableA where ID_A='yokota' and ID_B in(ID_A,f1,f2,f3,f4,f5)) order by 1 です。

tajix14
質問者

お礼

出来ました。有難うございました。 本当に助かりました。

関連するQ&A

  • SQL:テーブル結合で該当レコードがない場合

    SELECT TableA.ID,SUM(TableA.量),TableB.金額 FROM TableA,TableB WHERE TableA.ID = TableB.ID GROUP BY TableA.ID,TableA.量,TableB.金額 こんな感じのSQLなんですが TableAをメインテーブルとして ↓のような結果を得るように作り変えれないか考えています ■TableBとの結合レコードあり(金額登録あり) 1,50,1500 ■TableBとの結合レコードあり(金額登録なし) 1,50,(NULLかスペース) 考えているんですが思いつかないのでヒントいただけたらと思います。宜しくお願いします。

  • Joinしてカウントしたいのですが,,,

    どうにもSQLになじめず困っている初心者です。宜しくお願い致します。 tableAとtableBがあり,それぞれ6つの列があります。両方とも,英語の人名を入力したものです。 tableAは添付した画像のようになっていて, A_ID, A_Key, A_firstname1, A_firstname2, A_lastname1, A_lastname2 と6つの列があります。要は英語の人名のデータなのですが,別名や綴り違いがあるためにfirst nameもlast nameも2列ずつあります。tableAは,これが数百行あります。 tableBも同様に, B_ID, B_Key, B_firstname1, B_firstname2, B_lastname1, B_lastname2 と6つ列があります。ただしこちらは数万行あります。 やろうとしていることは,名前の綴り違いなどを考慮して,tableBの中にtableAの人名が何回出てくるか数えて,その数字をA_IDと一緒に表示するViewを作る,というものです。 そこで,以下のようなクエリを書きました。DBMSはMySQL 5.2を使っています。 Create View NewView as select tableA.A_ID, count(*) as Num from tableA join tableB on (tableA.A_firstname1 in (tableB.B_firstname1, tableB.B_firstname2)) and (tableA.A_lastname1 in (tableB.B_lastname1, tableB.B_lastname2)) group by tableA.A_ID ところが,出力されたViewはどうも思っていたものとは違い,名前が一致していないものもカウントされてしまいます。どこが間違っているのでしょうか。 お詳しい方のお知恵を拝借できたらと思います。どうか宜しくお願い致します。

  • テーブルの差分をとる結合

    TableAとTableBがあります。構造は同じです。 中身は下記のようだとします。 TableA      TableB ID VALUE     ID VALUE 1 A       3 C 2 B       4 D 3 C        差分結合結果を下記のようにとりたいのです。 1 A 2 B 4 D 良い方法をご存じでしたら、ご教授よろしくお願い致します。

  • 異なるテーブル間の和

    テーブルAの属性item1とテーブルBのitem1の和を求めるにはSQLでどのように記述すれば良いのでしょうか?? tableA ------ id item1 item2 pointer tableB ------ id item1 item2 pointer という2つのテーブルで,tableBのpointerはtableAのidを指しています.

  • 2つのテーブルを結合する際にIDを割り当てたい

    PHPでmySQLを作成しています。 現在学習中なのですが、自己解決できない問題が発生したのでどうかお知恵をお貸しください。 --- 同じデータベースにTableAとTableBがあります。 中身は下記のようだとします。 TableA      |  TableB id  name time | name time :   :   :  |  C1   D2 101 A1  B1  |  C2   D2    102 A2  B2  |   :    : 103 A3  B3  |  C20  C20 --- テーブルAのカラムid、name、timeの3カラム、テーブルBはname、timeの2カラムです。 これを --- TableA        TableB id  name time  name time :   :   : 101 A1  B1 102 A2  B2 103 A3  B3 104 C1  D1 105 C2  D2 :   :   : 123 C20  D20 --- とするような方法を教えてください。(TableBはレコードなし) テーブルの結合ではIDが割り当てられず、上手な方法が思いつきません。 どうかご教示のほど、よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • likeとjoinで詰まってます。助けてください。

    ASP+SQLServerを使用することになりました。(どちらも不得意です) 簡単なことかもしれませんがよく分からず数日悩んだ末、混乱してきたので質問させて頂きます。 助言をお願いします。 tableAにはa,b,c,d,eの5つのカラムがあります。 1) hogeと言う文字列が含まれたデータをc,d,eの三つのカラムの中から抽出。 2) 更に、その抽出結果が含まれたデータをtableBのカラムfから抽出。 3) 最終的にtableA.a, tableA.b, tableA.c, tableB.fと言う一覧を出したい。 のですが思ったように行きません。 1)の3つ目のカラムをtableB.fとinner join出来たら良いのに。と思いますが 1)が含まれる文字列になるので上手く行きません。 分かり難い表現で申し訳ありません。助けてください。 宜しくお願いします。

  • SQLを教えてください

    単純そうなのですがSQLが分かりません。 次のような2つのテーブルがあるとします。 TableA ( a VARCHAR2(2) b VARCHAR2(30) ) TableB ( x VARCHAR2(2) y VARCHAR2(30) z1 VARCHAR2(2) z2 VARCHAR2(2) z3 VARCHAR2(2) z4 VARCHAR2(2) z5 VARCHAR2(2) ) この時にTableBはTableAのグループみたいなものでz1からz5までがTableAのaが登録されています(NULLの場合もあります)。ここでTableBの内容を表示するときに x, y, b1, b2, b3, b4, b5 と出力したいのです。 すみませんがよろしくお願いします。

  • 複数表からのカウント(2)教えてください

    前回の質問と関連しますが 今度は複数の人について 以下のような処理を行うときのクエリーでうまくいか ないのですがどのようになおせばいいでしょうか。 よろしくお願いします <table A> n id name 1 1 yoshida 2 2 tanaka <table B> n id sub score 1 1 AAA 100 2 1 BBB 100 3 1 CCC 50 4 2 AAA 80 5 2 BBB 100 6 2 CCC 50 <result> name count yoshida 2 tanaka 1 tableAとtableBの2つの表があり tableAの2人(以上あり)のscoreが100である subの数をカウントしたい場合 SELECT tableA.name as Name, count(*) FROM tableA, TableB where(tableA.id = tableB.id and tableB.score = 100 )

    • ベストアンサー
    • MySQL
  • SQLでテーブルを結合した結果を取り出し

    SQLで以下の様なテーブルがあります。 tableA、tableB、tableCを使って、IDとNUMとRANKを結合し、 ID毎に、 RANKが1つでもあったら、”○”でその数を RANKが1つもなかったら、”×”で0を 取り出したい。 「oracle10g」です。 -- tableA ID,NUM,NAME,・・・・・ 000001,001, 000001,002, 000001,003, 000002,001, 000003,001, 000003,002, -- tableB ID,NUM,RANK 000001,001,A 000001,001,B 000001,001,C 000001,002,A 000001,003,C 000002,001,B 000002,002,B 000003,001,A 000003,002,A 000003,002,C --tableC RANK,NAME A, B, C, 結果として、 ID,RANK,判定,個数 000001,A,○,2 000001,B,○,1 000001,C,○,2 000002,A,×,0 000002,B,○,2 000003,A,○,2 000003,B,×,0 000003,C,○,1 を得たいです。 どのようなSQLにしたらよいか、よろしくお願いします。

  • テーブルの内容で更新したいのですが

    下記のようにテーブルがあります。 TableA colA colB ---- ----  A   1  B   2  C   3 TableB colA colB ---- ----  A   1  A   2  C   3 TableAに対してTableBとcolAが一致するcolBの合計を加算したいのです。 結果として TableA colA colB ---- ----  A   4  B   2  C   6 AはTableBに2レコードあるので合計3が加算されて4 BはTableBにレコードがないので変わらず2 CはTableBに1レコードあるので3が加算されて6 SQLでこのような更新処理(update)はできないでしょうか? よろしくお願い致します。