首页 > 解决方案 > 查询 SQL 时结果为空

问题描述

我想要一份报告,其中包含在特定时期没有销售的品牌。这是我到目前为止所尝试的,但我得到一个空列Brand_Name

SELECT DISTINCT 
    Brands$.BRAND_NAME
FROM
    Brands$
INNER JOIN 
    Products$ ON Brands$.BRAND_ID = Products$.BRAND_ID
LEFT JOIN 
    InvDetails$ ON Products$.PRODUCT_ID = InvDetails$.PRODUCT_ID
INNER JOIN 
    Invoices$ ON Invoices$.INVOICE_ID = InvDetails$.INVOICE_ID
WHERE 
    InvDetails$.PRODUCT_ID IS NULL 
    AND (Invoices$.INVOICE_DATE BETWEEN '2013-10-22 23:41:49.143' 
                                    AND '2013-11-22 17:54:03.437')

标签: sqlsql-server

解决方案


我正在使用 NOT EXISTS 排除在给定期间有发票的任何品牌

SELECT DISTINCT b.BRAND_NAME
FROM Brands$ b
INNER JOIN Products$ p ON b.BRAND_ID=p.BRAND_ID
WHERE NOT EXISTS(SELECT 1 
                 FROM Invoices$ i
                 JOIN InvDetails$ id ON i.INVOICE_ID = id.INVOICE_ID
                 WHERE i.INVOICE_DATE BETWEEN '2013-10-22 23:41:49.143' AND '2013-11-22 17:54:03.437'
                   AND id.PRODUCT_ID = p.PRODUCT_ID)

推荐阅读