- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:結合で重複のエラーが出る)
結合で重複のエラーが発生!カラムのidがどれなのかが分からない原因は?
このQ&Aのポイント
- 結合で重複のエラーが発生しています。おそらくカラムのidが結合の中で重複しているという内容ですが、どれのidが重複しているのかが分かりません。
- サブクエリの実行までは問題ありませんが、最終的には「tbl2sbelongs」テーブルの「count」の値によって「tbl1s」を降順に並べ替えたいと考えています。
- テーブル「tbl1s」にはidが1, 2, 3のレコードがあり、テーブル「tbl2s」にもidが1, 2, 3のレコードがあります。テーブル「tbl1s_tbl2s」には結合されたレコードが、「tbl2sbelongs」テーブルには各tbl2_idごとのcountの値があります。結合の中でidが重複しているため、エラーが発生しています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こういうものは順序だてて考えればそんなに難しいものではありません。 (1)tbl1単位でcountを集計 SELECT tbl1_id,SUM(count) AS count FROM tbl1s_tbl2s INNER JOIN tbl2sbelongs USING(tbl2_id) GROUP BY tbl1_id (2)これをtbl1にLEFT JOIN SELECT id FROM tbl1s LEFT JOIN ( SELECT tbl1_id,SUM(count) AS count FROM tbl1s_tbl2s INNER JOIN tbl2sbelongs USING(tbl2_id) GROUP BY tbl1_id ) AS SUB ON tbl1s.id=tbl1_id ORDER BY count DESC
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
回答No.2
>なぜ次のLEFT JOINした段階ではエラーが起こるのでしょうか? ようは*を使うとエラーが検証しにくいということです。 きちんとコーディングする場合は*はまず使いません。 実際に個別に*の内容をみるとidが二つあったりするし、それを 結合するときに競合がでているように見受けられます
質問者
お礼
ご回答ありがとうございます。 つまり、はじめの2つの重複カラム(id)はmysql側でなんとか処理してくれるけど、 3つ目以降はエラーになるという認識でいいのでしょうか? とりあえず「*」は使わず取り出すように心がけることで対処していきたいと思います。
お礼
ご回答ありがとうございます。 そのやり方でできました。ありがとうございます。 質問ではtbl2sテーブルをJOINに絡めてましたが、後で気づいたのですがこれは必要なかったですね・・・ tbl2sbelongsテーブルとtbl1s_tbl2sで直接JOINできたんですね。 その後、 「SQL Error: 1060: Duplicate column name 'id' 」 のエラーが SELECT tbl1_id,SUM(count) を SELECT *,SUM(count) にしていたことが原因だったことが分かったのですが、 ということはINNER JOIN の段階(サブクエリの段階)では「*」でもエラーにならなかったってことは 次のLEFT JOINが原因なのかと思ってこちらもINNER JOINに変えたのですが、同じエラーでした・・・ 「*」にidも含まれてるからだとは思うのですが、これは一体どういうエラーなのでしょうか? サブクエリの段階(SELECT *, SUM(count) as count FROM `tbl1s_tbl2s` AS `Tbl1sTbl2` INNER JOIN `tbl2sbelongs` AS `Tbl2sbelong` ON (`Tbl1sTbl2`.`tbl2_id`=`Tbl2sbelong`.`tbl2_id`) WHERE 1 = 1 GROUP BY `tbl1_id`) ではtbl1s_tbl2s、tbl2sbelongs両方とも同じ名前のカラム「id」を所有していてもエラーが起きないのですが、 なぜ次のLEFT JOINした段階ではエラーが起こるのでしょうか?