Отменить выбор всех записей одного и того же клиента, если выполнено условие - PullRequest
0 голосов
/ 26 мая 2019

У меня есть две таблицы данных:

Таблица 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 года. Это мой код:

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

Запись идентификатора клиента KH04 не должна появляться в результатепотому что он купил что-то на 22/06/2000 .
Так как я могу удалить KH04 из результата?
Спасибо.

Ответы [ 2 ]

2 голосов
/ 26 мая 2019

Вы, кажется, хотите 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).

Обратите внимание, что я изменил сравнение дат. Это делает их более склонными к использованию индекса.

0 голосов
/ 26 мая 2019

Вы можете сделать это с помощью 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  
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...