Mysql 如果某个值不存在,如何从多个订单中删除重复的结果?

Mysql 如果某个值不存在,如何从多个订单中删除重复的结果?,mysql,sql,Mysql,Sql,我有3个表格:订单、订单项和订单附加项 我必须在一行中获取订单的所有订单项目和订单插件 1-如果订单有1个产品和2个插件,结果应为: Order no produt name addons 123 mobile cardreader,screen gard Order no produt name addons 123 mobile,camera cardreader Order no pr

我有3个表格:订单、订单项和订单附加项

我必须在一行中获取订单的所有订单项目和订单插件

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

Order no    produt name      addons
123         mobile           cardreader,screen gard
Order no    produt name      addons
123         mobile,camera    cardreader   
Order no    produt name      addons
123         mobile,camera    cardreader,datacable  
Order no   produt name       addons
123        mobile,camera     cardreader,datacable,cardreader,datacable
2-如果订单有2个产品和1个插件,结果应为:

Order no    produt name      addons
123         mobile           cardreader,screen gard
Order no    produt name      addons
123         mobile,camera    cardreader   
Order no    produt name      addons
123         mobile,camera    cardreader,datacable  
Order no   produt name       addons
123        mobile,camera     cardreader,datacable,cardreader,datacable
3-如果订单中有两个产品,每个产品有一个附加组件,则结果应为:

Order no    produt name      addons
123         mobile           cardreader,screen gard
Order no    produt name      addons
123         mobile,camera    cardreader   
Order no    produt name      addons
123         mobile,camera    cardreader,datacable  
Order no   produt name       addons
123        mobile,camera     cardreader,datacable,cardreader,datacable
4-如果订单中有2个产品,每个产品有2个附加组件,则结果应为:

Order no    produt name      addons
123         mobile           cardreader,screen gard
Order no    produt name      addons
123         mobile,camera    cardreader   
Order no    produt name      addons
123         mobile,camera    cardreader,datacable  
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
它删除了重复的名称,如果相同的名称按顺序出现,我不希望出现这种情况。
就像一个订单一个产品和两个同名插件。

你的问题不清楚。要删除重复项还是保留重复项?因为你们在标题中说了“如何删除”…创建一个子查询,首先获取订单,然后创建另一个子查询获取concat项,第三个子查询获取concat插件。然后将它们连接到upHi-flefervre,通过我的查询,如果另一列有多个值,我将在两列中的任何一列中获得重复的值。所以我只想要表上实际存在的值。谢谢Andrew,你能给我一个参考代码的真实例子吗,这样我就可以理解你想说什么了?此外,你不认为这会是一个漫长的过程吗。谢谢