0
    CUSTOMER(CustID, CustName)
    Sale(SaleNo, StockNo, CustNo, SaleDate)

如何删除自 2009 年以来未购买任何商品的客户?

我可以使用减号获得 CustID

    SELECT CustID FROM CUSTOMER
    WHERE SaleDate <= to_date('31-12-09', 'DD-MM-YY')
    MINUS
    SELECT CustID FROM CUSTOMER
    WHERE SaleDate > to_date('31-12-09', 'DD-MM-YY');

但我不知道如何在单个查询中进行删除。

任何建议将不胜感激

4

3 回答 3

3
delete from CUSTOMER c
inner join Sale S 
on C.CustID=S.CustNo
where max(SaleDate)<='31-12-09'
于 2013-08-31T09:25:37.003 回答
2

您没有指定您的 DBMS,尽管我怀疑它是 Oracle 由于使用MINUSto_date()

无论如何,以下内容应该适用于 Oracle(以及任何符合 ANSI 标准的 DBMS)

delete from customer
where not exists (select 1 
                  from sale
                  where sale.custId = customer.CustNo
                    and sale.saledate >= date '2009-01-01')
于 2013-08-31T10:17:33.963 回答
0

在 SQL Server 中

DELETE FROM Customer
WHERE CustID IN ( SELECT CustNo FROM Sale 
                  GROUP BY CustNo
                  HAVING YEAR(MAX(SaleDate))<2009)

在 MySQL 中

DELETE FROM Customer
WHERE CustID IN ( SELECT CustNo FROM Sale 
                  GROUP BY CustNo
                  HAVING EXTRACT(YEAR FROM MAX(SaleDate))<2009)
于 2013-08-31T09:28:07.443 回答