- ベストアンサー
MYSQLで結合の仕方教えてください
- MYSQLで複数のテーブルを結合する方法について教えてください。db_test.sales、db_test.prodct、db_test.dailyreportという3つのテーブルがあります。
- 以下のSQL文は、2つのテーブルからデータを取得していますが、更に日報データから作業時間を製品番号毎に集計したデータを追加したいです。
- 正しい結合方法や集計方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
SELECT PD.productid as '製品番号', SR.cono as '客先側注文番号', str_to_date(SR.tehaiday,'%Y%m%d') as '手配日', str_to_date(SR.noukiday,'%Y%m%d') as '納入予定日', PD.hinmei as '製品名称', PD.daisu as '台数', PD.costsales as '原価', WT.worktime as '作業時間' FROM db_test.sales SR, db_test.prodct PD, (SELECT DR.productid as productid, total(DR.worktime) AS worktime FROM db_test.dailyreport DR GROUP BY DR.productid) WT WHERE SR.productid = PD.productid AND SR.productid = WT.productid AND SR.noukiday Like '201609%' ORDER BY PD.noukiday で、うまくいかないかな。
その他の回答 (1)
- kreikg
- ベストアンサー率39% (21/53)
色々と前提を確認したいのですが。 まず上の SELECT PD.productid as '製品番号', SR.cono as '客先側注文番号', str_to_date(SR.tehaiday,'%Y%m%d') as '手配日', str_to_date(SR.noukiday,'%Y%m%d') as '納入予定日', PD.hinmei as '製品名称', PD.daisu as '台数', PD.costsales as '原価', FROM db_test.sales SR, db_test.prodct PD, WHERE SR.productid = PD.productid AND SR.noukiday Like '201609%' ORDER BY PD.noukiday のSQL文は正常に動作していますか? 仮に両方のテーブルに製品番号があるとしてもdb_test.salesのデータの横にdb_test.prodct がくっつくだけでデータの整合性がとれていない状態になっていませんか? まずそこだけ直すなら SELECT PD.productid as '製品番号', SR.cono as '客先側注文番号', str_to_date(SR.tehaiday,'%Y%m%d') as '手配日', str_to_date(SR.noukiday,'%Y%m%d') as '納入予定日', PD.hinmei as '製品名称', PD.daisu as '台数', PD.costsales as '原価', FROM db_test.sales SR INNER JOIN db_test.prodct AS PD ON SR.productid = PD.productid WHERE SR.noukiday Like '201609%' ORDER BY PD.noukiday それから、個々の作業にかかった時間を集計するなら質問者さんのクエリだと製品番号ごとにグルーピングして合計を出していますが別の日の同じ製品の作業時間まで含まれた合計時間のテーブルになってしまいそうですが問題ないのですか?