我有一个简单的一对二的关系。
三张桌子
主要:
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;