在获取选择查询以返回我需要的数据时遇到了一些麻烦。请参见下面的简化示例。
Sku表
Sku SkuId
==================
ABC-123 123
DEF-456 456
GHI-789 789
JKL-987 987
SkuCombo表
SkuId SkuComboId Qty
===========================
123 456 1
123 789 2
123 987 1
“组合”项目是分配给包含多个项目的项目的sku号。例如,对于sku ABC-123
,您需要从Sku
中查找Sku table
以获得SkuId
(123),然后使用{{1} },从SkuId
中获取SkuComboIds
(456、789、987)。然后使用SkuCombo
表上的那些来获取对应的Sku
。以下查询几乎可以带我到那里,但是我不知道如何从Sku
表中获取Qty
列?
SkuCombo
所需结果
select *
from Skus
where SkuId in (Select SkuComboId
from SkuCombo sc
join Skus s on s.SkuId = sc.SkuId
where s.Sku = 'ABC-123')
答案 0 :(得分:4)
您需要SELF JOIN
:
select sk1.Sku , sk1.SkuId, skc.qty
from Sku sk inner join
SkuCombo skc
on skc.SkuId = sk.SkuId inner join
Sku sk1
on sk1.SkuId = skc.SkuComboId;
答案 1 :(得分:2)
不确定我是不是过于简化,还是不完全理解您的问题,但这不是答案:
Select *
from Skus s
join SkuCombo sc on s.SkuId = sc.SkuComboId
答案 2 :(得分:1)
使用内部联接可以轻松完成此操作,因为在任何一个表中都没有空值。
db.getCollection("metadata").aggregate(
[
{$unwind: '$tags'},
{$group: {_id:'$tags.name', total: {$sum: 1}}},
{$sort: {total: -1}}
]
);