如何在where子句中向SQL NOT IN添加另一个条件?

时间:2017-06-12 02:25:37

标签: mysql sql database

我有一些桌子来保养鞋子。

Brand ( brand_id, brand_name )
Initial_order table ( brand_name, shoe_count )
Sales table ( shoe_id, brand_name, purchase_date, returned_Date) 

现在在我们的系统中如果return_date为null,我们假设销售已完成。 现在查询我正在寻找的是: Return brand names which are completely sold out,即应该没有鞋子返回(Sales.return_Date == NULL)并且所有鞋子都已售出。

这是逻辑

select brand_id
from   brand
where  brand_name NOT IN ( select brand_name
                     from Sales
                     where returned_Date IS NOT NULL) 

此查询会返回所有尚未退回的品牌,但是,我需要验证的其他条件是 - > Initial_order.shoe_count = count of brand entries in Sales table

我很难理解如何在上一个查询中连接这个额外的检查。

2 个答案:

答案 0 :(得分:1)

您的架构似乎存在一些问题,例如:您使用brand_name而不是ID来加入表格,而ID始终是唯一的。无论如何,我认为你可以通过将Brand表连接到两个子查询来解决这个问题。第一个子查询查找Initial_order表中的品牌条目数,第二个子查询查找未返回的条目数。因此,我假设具有匹配计数的给定品牌意味着所有订单都已成功完成。

SELECT t1.*
FROM Brand t1
INNER JOIN
(
    SELECT brand_name, SUM(shoe_count) AS shoe_count
    FROM Initial_order
    GROUP BY brand_name
) t2
    ON t1.brand_name = t2.brand_name
INNER JOIN
(
    SELECT
        brand_name,
        SUM(CASE WHEN returned_Date IS NOT NULL THEN 1 ELSE 0 END) AS shoe_count_sales
    FROM Sales
    GROUP BY brand_name
) t3
    ON t1.brand_name = t3.brand_name
WHERE t2.shoe_count = t3.shoe_count_sales

答案 1 :(得分:1)

您可以在.then子句中执行此操作:

 gridService.getGridConfig()
    .then(function(data) {
       ////
       // code dependent on server response
       ////
    });