我有一个简单的一对二的关系。

三张桌子

主要:

ID TITLE
________
1  Peter
2  Lars


命令:

SKU MAIN_ID
___________
RFX 1
HNI 2
RRP 2


工具:

NAME  MAIN_ID
____________
FORK  1
KNIFE 1
SPOON 2


因此,订单和工具都有一个MAIN_ID,它引用主表。
因此,Peter订购了RFX以及工具FORK和SPOON
Lars拥有HNI和RRP订单以及SPOON工具。

我如何做一个查询,以找出彼得拥有哪些订单和工具,哪些拥有lars?
我尝试使用内部联接进行尝试,但是有重复的条目。

最佳答案

您可能想要使用group_concat()来获取一行中的值。但是,您需要在join之前预先汇总数据:

select m.*, o.skus, t.tools
from main m join
     (select main_id, group_concat(sku) as skus
      from orders
      group by main_id
     ) o
     on o.main_id = m.id join
     (select main_id, group_concat(name) as tools
      from tools
      group by main_id
     ) t
     on t.main_id = m.id;

10-08 09:07