group_concatでテーブルを結合する際に問題があります。ここに詳細があります。複数のgroup_concatを持つテーブルの結合
table_orders:
item_cd order_id descs quantity status seq_no
1 100 coca-cola 2 A 232
2 100 pizza 1 A 233
3 101 cheeseburger 5 A 234
4 102 pepsi 4 A 235
4
table_instructions:
item_cd instruction
3 more cheese
3 less vegetable
cancelled_item_table:
quantity seq_no
1 234
1 234
1 235
今、私が達成したいものを、このようなものです:
item_cd descs quantity instructions cancelled_item
1 coca-cola 2 - -
2 pizza 1 - -
3 cheeseburger 2 more cheese, less vegetable 1,1
4 pepsi 4 - 1
これは私の現在のクエリです:
SELECT
ord.item_cd,
ord.order_id,
ord.descs,
ord.quantity,
GROUP_CONCAT(x.quantity) as cancelled,
GROUP_CONCAT(i.instruction) as instruct
FROM table_orders ord
LEFT JOIN cancelled_item_table x ON ord.seq_no = x.seq_no
LEFT JOIN table_instructions i ON ord.item_cd = i.item_cd
WHERE ord.status = 'A'
GROUP BY ord.order_id
、ここでは出力されます:
item_cd descs quantity instructions cancelled_item
1 coca-cola 2 - 1
2 pizza 1 - 1
3 cheeseburger 2 more cheese, more cheese,
less vegetable, less vegetable 1,1,1,1
4 pepsi 4 - 1
あなたが気付いた場合、チーズバーガーは2キャンセル項目と2命令を持っていますが、出力は4で、ルックスそれが倍増しているように。
あなたはhttp://sqlfiddle.com/に構造を配置することはできますか? – jcho360
私は同じ入力/クエリ(特に2つのord_id = 100)で同じ出力を得られないので、あなたは何かミスタイプするかもしれないと思います。 –
これは、MySQLの寛大な 'GROUP BY'ルールが実際に出力よりも多くの行グループに作用するためです。あなたは 'GROUP BY order_id'しか持っていませんが、' SELECT'に他のcolを持っています。 @ExplosionPillsで提案されているようにデータを修正すると、クエリを実行するのに役立ちます。 –