我有一个订单数据库,其详细信息保存在多个表格中;订单,order_items,客户,产品,product_items,笔记。每个订单在customers和products表中都有一个关联的条目,至少有一个条目在products_items表中。注释表可能有也可能没有订单条目。
我有以下查询来检索我正在创建数组的订单数据: -
SELECT * FROM orders o
INNER JOIN order_items oi ON oi.order_id = o.order_id
INNER JOIN customer c ON o.customer_id = c.customer_id
INNER JOIN product p ON oi.product_id = p.product_id
INNER JOIN product_item pi ON pi.product_item_id = oi.product_item_id
这就像我需要它一样,为每个订单项创建一个不同的行。我未能有效地做的是找出订单是否有任何相关的注释。使用子查询似乎非常低效(可能有1000多个订单)并且使用JOIN导致订单项被复制,其中有多个与订单关联的注释。我怎样才能最好地找出是否有任何笔记?
非常感谢任何帮助。
答案 0 :(得分:0)
您可以在"笔记"上进行外部联接。表并使用" group_concat"功能,以避免重复。
http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat
答案 1 :(得分:0)
我假设notes
位于不同的表格中,因为它是1:N且ID称为note_id。
select * from
(
SELECT distinct(o.order_id) FROM
orders o, order_items oi, customer c, product p, product_items as pi, notes as n
where o.order_id = oi.order_id
and o.note_id = n.note_id
and o.customer_id = c.customer_id
and p.product_id = oi.product_id
and p.product_id = oi.product_id
) as q,
order ord
where q.order_id = ord.order_id