Я пишу приложение на C # и использую Access .mdb. У меня есть таблица с сообщениями электронной почты и таблица с отношениями сообщений (каждое сообщение электронной почты может быть назначено нескольким группам работников).
Я хочу получать сообщения из первой таблицы, которые НЕ назначены какой-либо команде, т. Е. Либо не имеют записей во второй таблице, либо содержат пустую запись. Он работает нормально с пустыми записями, но не возвращает строки, которые вообще не имеют этой записи присваивания.
Я использую следующий запрос:
SELECT TOP 10 Mails.*
FROM Mails INNER JOIN MailAssignments ON Mails.msgId = MailAssignments.msgId
WHERE (Mails.msgId <= ?)
AND
(Mails.msgId NOT IN (SELECT msgId FROM MailAssignments))
OR (MailAssignments.forTeam IS NULL)
OR (MailAssignments.forTeam = '')
UPDATE:
Мне НУЖНО использовать какой-то тип JOIN, потому что при некоторых условиях запрос должен также возвращать строки, имеющие отношение в другой таблице (например, когда кто-то хочет отобразить сообщения из своей команды И неназначенные сообщения).
UPDATE
ОК, я думаю, что могу упростить это, удалив любое назначение из второй таблицы, чтобы мне не нужно было проверять пустые назначения, только те, которые вообще не существуют. Но мне все еще нужно иногда показывать данные, которым присваивается ДАЛЕЕ данные, которые не были назначены. И мне нужно построить один запрос для того, который будет иметь только другие измененные параметры: /
ОБНОВЛЕНИЕ / РЕШЕНИЕ:
Я сделал еще несколько корректировок, но LEFT JOIN в основном помог мне! Спасибо за эту подсказку и всю вашу помощь, ребята!