[英]Sql Query to get an item that contains multiple ids from another table
我有三张桌子。 容器、库存和 SKU
集装箱桌
容器标识 |
---|
C1 |
C2 |
C3 |
库存表
库存编号 | 单品 | 容器 |
---|---|---|
I1 | S1 | C1 |
I2 | S1 | C2 |
I3 | S2 | C1 |
SKU表
SkuId |
---|
S1 |
S2 |
S3 |
我需要创建一个 sql 查询,该查询将返回包含所有给定 SKU id 的容器。 因此,如果我想要具有 SKU S1 的容器,我的结果应该是 C1 和 C2,但是如果我想要获得具有 SKU id S1 和 S2 的容器,我唯一的结果应该是 C1。 C2 不应该是结果,因为它没有 S2。
到目前为止,我尝试过的查询是
SELECT distinct containerId FROM Container c
JOIN Inventory i ON i.Container = c.ContainerId
JOIN SKU s ON s.SkuId = i.Sku
WHERE s.SkuId IN (S1, S2)
但是 WHERE IN 语句是一个简写的 OR,因此它也会返回 C2 作为结果,因为它包含 S1。
我知道没有办法简写 AND 条件,但是有没有类似的方法或可能的方法来做到这一点?
您使用 group by 和 count 来验证所有必需的 skus 是否存在,而不是 distinct :
SELECT c.ContainerId
FROM Container c
JOIN Inventory i ON i.Container = c.ContainerId
JOIN SKU s ON s.SkuId = i.Sku AND s.SkuId in (S1, S2)
GROUP BY c.ContainerId
HAVING COUNT(DISTINCT s.SkuId)=2
但是,正如其他人评论的那样,除了 Inventory 之外,不需要使用任何表:
SELECT i.Container
FROM Inventory i
WHERE i.Sku in (S1, S2)
GROUP BY i.Container
HAVING COUNT(DISTINCT i.Sku)=2
对于您在问题中指定的结果,您实际上不需要此查询的任何连接:
SELECT i.Container
FROM Inventory i
WHERE i.Sku in (S1, S2)
GROUP BY i.Container
HAVING COUNT(i.Sku) = 2;
如果容器可以有多个行用于同一个SkuId
则您只需要COUNT(DISTINCT)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.