首页 > 解决方案 > SQL - 查找所有不库存 2003 年 1 月 1 日之后生产的产品的商店

问题描述

我想查找所有不库存 2003 年 1 月 1 日之后生产的产品的商店。

我目前拥有所有名称不同的商店。一些在 2003 年 1 月 1 日之后制造的库存产品,一些在此之前制造的库存产品和一些在之前和之后制造的库存产品。

我试过的是

SELECT DISTINCT s.name FROM Store s
    WHERE s.pcode NOT IN (
        SELECT s2.pcode
        FROM StockInfo s2
        WHERE s2.productRelease BETWEEN "2003-01-01" AND NOW()
    )

但是,这将返回在指定日期之前和之后生产产品的商店和仅在指定日期之前生产产品的商店。

有人能帮我解决这个问题吗?

这些表的结构是:

商店

ID | name  
1  | Coles  
2  | Woolworths  

等等

股票信息

ID | name       | pcode | productRelease  
1  | Coles      | 1     | "2010-03-05"  
1  | Coles      | 3     | "2001-01-01"  
2  | Woolworths | 2     | "2003-01-01"

等等

标签: sql

解决方案


使用not exists

SELECT s.name
FROM Store s
WHERE NOT EXISTS (SELECT 1
                  FROM StockInfo si
                  WHERE si.id = s.id AND
                        si.productRelease >= '2003-01-01'
                 );

大概id商店的代码。这应该被称为更具描述性的东西,例如storeId,如果您可以控制数据模型。同样,name不应在store和中重复stockInfo

此外,SELECT DISTINCT对于此查询或您的版本,应该不是必需的。


推荐阅读