使用子查询和“在哪里”返回多列

时间:2018-06-21 15:17:03

标签: sql oracle

在获取选择查询以返回我需要的数据时遇到了一些麻烦。请参见下面的简化示例。

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')

3 个答案:

答案 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}}
    ]
);