MYSQL - 查找关联表中是否有任何条目的有效方法

时间:2016-04-04 16:12:46

标签: mysql

我有一个订单数据库,其详细信息保存在多个表格中;订单,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导致订单项被复制,其中有多个与订单关联的注释。我怎样才能最好地找出是否有任何笔记?

非常感谢任何帮助。

2 个答案:

答案 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