SELECT
op.sub_order_id,
s.supplier_id,
GROUP_CONCAT(opb.box_id SEPARATOR ','),
op.delivery_country
FROM
order_p op
INNER JOIN
supplier s ON s.supplier_id = op.supplier_name
LEFT JOIN
order_boxes opb ON op.sub_order_id = opb.sub_order_id
WHERE
op.order_active=0
AND op.ship_date>='2013-01-01'
AND op.ship_date<='2013-04-24'
ORDER BY op.ship_date DESC
私は結合があまり得意ではないので、ご容赦ください。
order
一致するサプライヤーマッピングがテーブルに存在するように、指定された日付範囲の間のテーブルからすべてのデータを選択する必要があるこのクエリがありsupplier
ます。order_boxes
この情報に加えて、sub_order_id フィールドでリンクされたテーブルにボックスが存在する場合は、ボックスもフェッチする必要があります。
ここで、注文テーブルとサプライヤー テーブルを結合すると、約 1000 レコードの正しいレコード セットが得られますが、ボックス テーブルに追加しようとするとすぐに 1 行しか得られません。これは、box テーブルにレコードが 1 つしかないために発生すると推測していますが、box テーブルとともに order テーブルからすべてのレコードを取得する必要があります。INNER JOIN
ボックス テーブルにマップされている一致するサブオーダーのレコードを 1 つだけ取得するのではなく、左結合を使用すると、 sub_order_idLEFT JOIN
とボックス テーブルの値に関係なく、日付範囲内の最初のレコードが取得されます。
助けてください。また、さらに情報が必要な場合はお知らせください。
EDIT :以前に完全なものを投稿しなかったことを申し訳ありませんが、問題は GROUP_CONCAT にあると思います。これは、レコードセット全体をグループ化し、ボックス テーブル内のレコードのみをグループ化したい場合に使用する必要があるかもしれません。サブクエリ?
電流出力
179-1 | 2 | 2,4,3 | Canada
期待される出力
168-1 | 1 | | Texas
.....
......
179-1 | 2 | 2,4,3 | Canada
.....
......