Member 13055644 Ответов: 1

Как работать с not in


Привет друзья
У меня есть таблица с именем " attachment_marche"
create table attachement_marche
(
Id_attachement_marche int primary key identity NOT NULL,
Id_decompte int foreign key references decompte (Id_decompte),
Id_bon_reception_marche int foreign key references bon_reception_marche(Id_bon_reception_marche),
Id_marche int foreign key references marche(Id_marche),
Num_attachement varchar(100) COLLATE French_CI_AS,
Date_etablissement date,
Date_debut date,
Date_fin date,
Flag_dernier varchar(20)COLLATE French_CI_AS,
Montant float,
Ind_supp int DEFAULT 1,
User_create varchar(100) COLLATE French_CI_AS NOT NULL,
Date_create datetime DEFAULT getdate() NOT NULL,
User_modif varchar(100) COLLATE French_CI_AS ,
Date_modif varchar(100) COLLATE French_CI_AS
)


И таблица с именем bon_reception_marche
create table bon_reception_marche
(
Id_bon_reception_marche int primary key identity NOT NULL,
Id_marche int foreign key references marche(Id_marche),
Designation_bon_reception varchar(100) COLLATE French_CI_AS,
Num_bon_reception varchar(100) COLLATE French_CI_AS,
Date_commande date,
Date_reception date,
Unite varchar(50) COLLATE French_CI_AS,
Qte float,
Prix_unitaire float,
Montant float,
TVA float,
MO varchar(100) COLLATE French_CI_AS,
OT varchar(100) COLLATE French_CI_AS,
Ind_supp int DEFAULT 1,
User_create varchar(100) COLLATE French_CI_AS NOT NULL,
Date_create datetime DEFAULT getdate() NOT NULL,
User_modif varchar(100) COLLATE French_CI_AS ,
Date_modif varchar(100) COLLATE French_CI_AS,
)
I want to display the vouchers of receipts which are between two dates and which are not affected to any attachment of the marche


И заранее спасибо друзья

Что я уже пробовал:

Я проверил этот запрос, но он не сработал
select * from bon_reception_marche where
Id_bon_reception_marche NOT IN
(select Id_bon_reception_marche from attachement_marche where Id_marche in
(select Id_marche from marche where Num_marche = 'DG/01/2014'))
and Date_reception between '2016-07-07' and '2017-06-19' and
Id_marche in (select TOP 1 Id_marche from marche where Num_marche = 'DG/01/2014')

ZurdoDev

Используйте не существует или не в или использовать левое соединение и проверьте, где идентификатор имеет значение null.

Member 13055644

я проверил этот запрос, но он не сработал

выбирать *
от bon_reception_marche br
левое соединение
attachement_marche на
на.Id_bon_reception_marche = БР.Id_bon_reception_marche
слева присоединяйтесь к марке
на.Id_marche = марш.Id_marche
где
Date_reception между
'2016-04-07" и " 2017-06-19 и на.Id_marche в
(выберите Id_marche из региона Марке, где Num_marche = ДГ/01/2014) и на.Id_bon_reception_marche = нуль

Member 13055644

я попробовал эту просьбу, но ничего не вышло

выбирать *
от bon_reception_marche br
левое соединение
attachement_marche на
на.Id_bon_reception_marche = БР.Id_bon_reception_marche
слева присоединяйтесь к марке
на.Id_marche = марш.Id_marche
где
Date_reception между
'2016-04-07" и " 2017-06-19 и на.Id_marche в
(выберите Id_marche из региона Марке, где Num_marche = ДГ/01/2014) и на.Id_bon_reception_marche = нуль

ZurdoDev

Вы должны пройти через это и выяснить, что не работает, потому что мы не можем видеть ваши данные или знать, почему они не дают вам то, что вы хотите.

Member 13055644

Я хочу отобразить список квитанций, которые не существуют в таблице attachement_marche

ZurdoDev

Один простой способ это сделать
ВЫБИРАТЬ *
от поступлений
LEFT JOIN attachment_marche ON field1 = field1
Где attachment_marche.идентификатор имеет значение null

При соединении слева, если запись не существует, то она будет равна нулю. Это сработает. Начните с этого, убедитесь, что вы получаете то, что ожидаете, а затем добавьте другие предложения where.

1 Ответов

Рейтинг:
0

Debasis_Saha

Вы не дали никакого образца данных. Но в соответствии с комментариями ur, которые вы хотите отобразить список квитанций, который не существует в таблице вложений, проверьте следующий запрос.

SELECT * 
FROM BON_RECEPTION_MARCHE A
WHERE DATE_RECEPTION BETWEEN '2016-07-07' AND '2017-06-19' 
AND ID_BON_RECEPTION_MARCHE NOT IN (SELECT ID_BON_RECEPTION_MARCHE FROM ATTACHEMENT_MARCHE WHERE ID_MARCHE IN 
(SELECT ID_MARCHE FROM MARCHE WHERE NUM_MARCHE = 'DG/01/2014'))