- ベストアンサー
サブクエリ内でINNER JOINは?エラー箇所は?
- サブクエリ内でINNER JOINを使用する際に発生するエラー箇所は、GROUP BY c_nameか、USING (c_name)か、INNER JOIN t_company ON t_company.c_name = tb_score.c_nameです。
- 質問者はt_scoreの親テーブル名t_companyと、子テーブルt_itemsを使用して特定の操作を行いたかったが、エラーが発生しました。
- SQLの規則に反する操作を行っている可能性が高いです。詳しいエラーメッセージやコードを確認して、問題箇所を特定する必要があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
今手元に環境がないので勘ですが… SELECTで出そうとしているカラムの名前がダブっているだけだと思います。 t_itemsの構造がわかりませんが、多分table.T1を作っているサブクエリの中の「SELECT *」の部分で *ではなく、一つづつカラムを指定してあげれば大丈夫かと。
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
深く考えすぎ まず第一に選手ごとの最多点数を拾います。 select c_name,max(c_score) from tb_score group by c_name; この条件にあう、選手とスコアの組み合わせをwhereで絞り込むだけです select c_name,game,c_score from tb_score where (c_name,c_score) in(select c_name,max(c_score) from tb_score group by c_name);
お礼
ご回答・アドバイスありがとうございます。 はい、複雑になってしまっております。 実際は、質問文で書いたSQL文は以下のように、サブクエリ内でWHERE句にもう1つ条件が追加されます。 select * from ( SELECT * FROM tb_score INNER JOIN ( SELECT c_name, MAX( c_score ) AS MAXSCORE FROM tb_score GROUP BY c_name ) AS TBDUMMY1 USING ( c_name ) INNER JOIN t_company ON t_company.c_name = tb_score.c_name WHERE c_score = MAXSCORE AND publish_date + INTERVAL duration DAY >= CURRENT_DATE ) as T1 , t_items where T1.id_score = t_items.id_score t_company の`duration`カラムをWHERE句に使う為、 サブクエリ内で t_companyテーブルを結合させました。 ご提示いただいたSQL文、今後使って行こうと思います。 大変勉強になりました。 ありがとうございました。
お礼
ご回答ありがとうございます。 ご指摘のとおり、table.T1サブクエリの「SELECT *」のカラムを個別に指定して、エラーがなくなりました。 勉強になりました。 ありがとうございました。