【问题标题】:Returning multiple columns with subquery and 'where in'使用子查询和“在哪里”返回多个列
【发布时间】:2018-06-21 15:17:03
【问题描述】:

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

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 table 中查找 Sku 以获取 SkuId(123),然后使用 SkuId 获取 SkuComboIds (456, 789、987) 来自SkuCombo。然后使用Sku 表上的那些得到他对应的Sku。以下查询几乎可以让我到达那里,但我不知道如何从SkuCombo 表中获取Qty 列?:

select * 
from Skus 
where SkuId in (Select SkuComboId 
                from SkuCombo  sc
                join Skus s on s.SkuId = sc.SkuId
                where s.Sku = 'ABC-123')

想要的结果

Sku         SkuId       Qty
============================
DEF-456     456         1
GHI-789     789         2
JKL-987     987         1

【问题讨论】:

  • 作为答案的单连接查询有什么问题?

标签: sql oracle


【解决方案1】:

你需要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;

【讨论】:

  • 该死,我在之前的尝试中非常接近这个。谢谢!
【解决方案2】:

不确定我是否过于简单化,或者没有 100% 理解您的问题,但这里的答案不是内部连接:

Select *
from Skus s
join SkuCombo sc on s.SkuId = sc.SkuComboId

【讨论】:

  • 这不限于与 ABC-123 相关的 SKU?
【解决方案3】:

这可以使用内连接轻松完成,因为任何一个表中都没有空值。

SELECT s.Sku, s.SkuId, sc.Qty
FROM SkuCombo sc
    INNER JOIN Skus s ON sc.SkuComboId = s.SkuId

【讨论】:

  • 这不限于与 ABC-123 相关的 SKU? (另外,请不要全部大写......)
猜你喜欢
  • 2016-06-04
  • 1970-01-01
  • 2018-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多