如果满足条件,请取消选择同一客户的所有记录

时间:2019-05-25 22:40:53

标签: sql sql-server

我有两个数据表:

表KHACHHANG:

MAKH    TENKH              DIACHI       DT       EMAIL
----------------------------------------------------------------------------
KH01    NGUYEN THI BE      TAN BINH     8457895  bnt@yahoo.com
KH02    LE HOANG NAM       BINH CHANH   9878987  namlehoang @abc.com.vn
KH03    TRAN THI CHIEU     TAN BINH     8457895 
KH04    MAI THI QUE ANH    BINH CHANH       
KH05    LE VAN SANG        QUAN 10               sanglv@hcm.vnn.vn
KH06    TRAN HOANG KHAI    TAN BINH     8457897

表HOADON:

MAHD    NGAY        MAKH
------------------------
HD001   12/05/2000  KH01
HD002   25/05/2000  KH02
HD003   25/05/2000  KH01
HD004   25/05/2000  KH04
HD005   26/05/2000  KH04
HD006   02/06/2000  KH03
HD007   22/06/2000  KH04
HD008   25/06/2000  KH03
HD009   15/08/2000  KH04
HD010   30/09/2000  KH01

我想列出所有在2000年6月没有下订单的客户。这是我的代码:

select distinct KHACHHANG.MAKH, DIACHI, DT
    from KHACHHANG
    left join HOADON
    on HOADON.MAKH = KHACHHANG.MAKH
    where MONTH(HOADON.NGAY)<>6 and YEAR(HOADON.NGAY)=2000
        or KHACHHANG.MAKH not in (select MAKH from HOADON)

但是结果是:

MAKH  DIACHI                                             DT
----- -------------------------------------------------- ----------
KH01  TAN BINH                                           8457895
KH02  BINH CHANH                                         9878987
KH04  BINH CHANH                                         NULL
KH05  QUAN 10                                            NULL
KH06  TAN BINH                                           8457897

客户ID KH04 的记录不应出现在结果中,因为他在 2000年6月22日购买了商品。
那么如何从结果中删除KH04?
谢谢。

2 个答案:

答案 0 :(得分:2)

您似乎想要not exists

select k.*
from KHACHHANG k
where not exists (select 1
                  from HOADON h
                  where h.MAKH = k.MAKH and
                        h.ngay >= '2000-06-01' and
                        h.ngay < '2000-07-01'
                 );

我建议在HOADON(MAKH, NGAY)上建立索引。

请注意,我更改了日期比较。这使它们更适合使用索引。

答案 1 :(得分:0)

您可以使用not exists来做到这一点:

select k.*
from KHACHHANG k
where not exists (
  select 1 from HOADON
  where makh = k.makh and MONTH(ngay) = 6 and YEAR(ngay)=2000  
)