如果没有值,如何从多个订单中删除重复的结果?

时间:2016-04-01 23:04:21

标签: mysql sql

我有3个表:orders,order_items和order_addons。

我必须在一行中获取订单的所有order_items和order_addons。

1 - 如果订单包含1个产品和2个插件,则结果应为:

Order no    produt name      addons
123         mobile           cardreader,screen gard

2 - 如果订单有2个产品和1个插件,则结果应为:

Order no    produt name      addons
123         mobile,camera    cardreader   

3 - 如果订单有2个产品,每个产品有1个插件,则结果应为:

Order no    produt name      addons
123         mobile,camera    cardreader,datacable  

4 - 如果订单有2个产品,每个产品有2个插件,则结果应为:

Order no   produt name       addons
123        mobile,camera     cardreader,datacable,cardreader,datacable

实际上,我的查询是:

SELECT 
    orders.invoice_id AS 'Order Number',
    GROUP_CONCAT(IFNULL(order_items.product_name, '')) AS 'Product Name',
    GROUP_CONCAT(IFNULL(order_addons.addon_name, '')) AS 'Addon Name'
FROM orders
LEFT JOIN order_items ON order_items.cart_id = orders.cart_id
LEFT JOIN order_addons ON order_addons.orderitem_id = order_items.orderitem_id
WHERE orders.invoice_id IN ('89161')
GROUP BY orders.order_id
ORDER BY orders.order_id DESC

它检索重复的名称,如第1点所示。

Order no   produt name       addons
123        mobile,mobile     cardreader,screen gard

对于第2点:

Order no   produt name       addons
123        mobile,camera     cardreader,cardreader

如果我使用此查询:

SELECT 
   orders.invoice_id AS 'Order Number',
   GROUP_CONCAT(DISTINCT IFNULL(order_items.product_name, '')) AS 'Product Name',
   GROUP_CONCAT(DISTINCT IFNULL(order_addons.addon_name, '')) AS 'Addon Name'
FROM orders
LEFT JOIN order_items ON order_items.cart_id = orders.cart_id
LEFT JOIN order_addons ON order_addons.orderitem_id = order_items.orderitem_id
WHERE orders.invoice_id IN ('89161')
GROUP BY orders.order_id
ORDER BY orders.order_id DESC

它会删除重复的名称,如果按顺序存在相同的名称,我也不希望这样。 就像一个订单一个产品和两个同名的插件。

0 个答案:

没有答案