Регистрация дает неправильный ответ - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть 2 таблицы « Event_Volunteer_Activity », в которых я храню заявителя, и « Voluntee_Attendance », который имеет соответствующую посещаемость для волонтера

Event_Volunteer_Activity
EventId VolunteerId ActivityId
19      2491          40
19      2491          42

Voluntee_Attendance
EventId ActivityId  VolunteeId
19        40          2491

теперь, когда я бегу

SELECT Event_Volunteer_Activity.VolunteerId,
       Voluntee_Attendance.VolunteeId,
       Event_Volunteer_Activity.ActivityId
FROM Event_Volunteer_Activity
     RIGHT OUTER JOIN Voluntee_Attendance ON Event_Volunteer_Activity.VolunteerId = Voluntee_Attendance.VolunteeId
WHERE (Event_Volunteer_Activity.VolunteerId = 2491);

Я получаю

  VolunteerId   VolunteeId  ActivityId
  2491             2491       40
  2491             2491       42

Когда я выполняю правое или левое соединение, я получаю ответ выше. Где я должен получить так как Voluntee_Attendance не имеет посещаемости для ActivityId = 42

 VolunteerId    VolunteeId  ActivityId
      2491             2491       40
      2491             null       42

Ответы [ 4 ]

0 голосов
/ 25 февраля 2020
 SELECT E.VolunteerId, V.VolunteeId, E.ActivityId
 FROM Event_Volunteer_Activity E LEFT JOIN 
 Voluntee_Attendance V
 ON E.VolunteerId = V.VolunteeId
 WHERE E.VolunteerId = 2491;
0 голосов
/ 25 февраля 2020

Включить ACTICITYID в связывание и перейти в ЛЕВОЕ объединение

SELECT V.VolunteerId, E.ActivityId
  FROM Event_Volunteer_Activity E
  LEFT JOIN Voluntee_Attendance V

  ON E.VolunteerId = V.VolunteerId
  AND E.activityid = V.ActivityId

WHERE E.VolunteerId = 2491;

Вывод будет

enter image description here

0 голосов
/ 25 февраля 2020

Пожалуйста, попробуйте следующий запрос, в котором мы добавляем два термина в таблицу соединений и псевдоним таблицы для простоты кода:

SELECT EVA.VolunteerId,
       VA.VolunteeId,
       EVA.ActivityId
FROM Event_Volunteer_Activity as EVA
     LEFT OUTER JOIN Voluntee_Attendance as VA ON EVA.VolunteerId = VA.VolunteeId and EVA.ActivityId = VA.ActivityId
WHERE (EVA.VolunteerId = 2491);
0 голосов
/ 25 февраля 2020

Вы описываете LEFT JOIN:

SELECT eva.VolunteerId, va.VolunteeId, eva.ActivityId
FROM Event_Volunteer_Activity eva LEFT OUTER JOIN 
     Voluntee_Attendance va
     ON eva.VolunteerId = va.VolunteeId
WHERE eva.VolunteerId = 2491;

Обратите внимание, что псевдонимы таблиц облегчают написание и чтение запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...