MS Access Help для запуска запроса - PullRequest
0 голосов
/ 24 января 2019

У меня есть две таблицы следующим образом. enter image description here

Я хочу получить всех активных участников и период выплат = две недели и соответствующую запись сбережений для каждого участника за определенный годи месяц.Обратите внимание, что некоторые члены могут не иметь записи сбережений за данный год и месяц.У меня написан запрос, но он не возвращает участников, у которых нет записи о сбережениях в таблице сбережений.

SELECT Member.memberID As [ID],Member.firstName AS [First Name],
       Member.lastName AS [Last Name], Member.paymentPeriod AS [Payment Period],
       Savings.savingId AS [Savings Id], Savings.enteredAmount AS [Amount]
FROM Member
    LEFT JOIN Savings ON Member.memberID = Savings.memberId
WHERE Member.isActive = 'Active' AND Member.paymentPeriod = 'Fortnightly'
      AND Year(Savings.enteredDate)=2019 AND Month(Savings.enteredDate) = 1;

1 Ответ

0 голосов
/ 24 января 2019

Переместите условия SAVINGS с WHERE на ON, чтобы получить истинное значение LEFT JOIN:

SELECT Member.memberID As [ID],Member.firstName AS [First Name],
       Member.lastName AS [Last Name], Member.paymentPeriod AS [Payment Period],
       Savings.savingId AS [Savings Id], Savings.enteredAmount AS [Amount]
FROM Member
    LEFT JOIN Savings ON Member.memberID = Savings.memberId
      AND Year(Savings.enteredDate)=2019 AND Month(Savings.enteredDate) = 1
WHERE Member.isActive = 'Active' AND Member.paymentPeriod = 'Fortnightly';

(С этими условиями в предложении WHERE вы получите регулярныеINNER JOIN результат.)

Редактировать: Попытка избежать " Выражение объединения не поддерживается ошибка ":

SELECT Member.memberID As [ID],Member.firstName AS [First Name],
       Member.lastName AS [Last Name], Member.paymentPeriod AS [Payment Period],
       Savings.savingId AS [Savings Id], Savings.enteredAmount AS [Amount]
FROM Member
    LEFT JOIN Savings ON Member.memberID = Savings.memberId
WHERE Member.isActive = 'Active' AND Member.paymentPeriod = 'Fortnightly'
      AND (Year(Savings.enteredDate)=2019 or Year(Savings.enteredDate) IS NULL)
      AND (Month(Savings.enteredDate) = 1 or Month(Savings.enteredDate) IS NULL);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...