我有两个数据表:
表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?
谢谢。
答案 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
)