Pobierz rekordy z jednej tabeli, w której nie ma rekordu w innej

SURVEYS stół:
SurveyID
UserID
Question
Choice1
Choice2
Choice3
RESPONSES stół:
UserID
SurveyID
Answer

Pierwsze pragnienie (osiągnięte): Pokaż wszystkie ankiety zainicjowane przez użytkownika 28:

SELECT * 
  FROM Surveys 
 WHERE Surveys.UserID = 28

Drugie pragnienie (osiągnięte): Pokaż mi wszystkie ankiety, na które odpowiedział Użytkownik 28:

SELECT * 
  FROM Surveys 
INNER JOIN Responses ON Surveys.SurveyID = Responses.SurveyID 
 WHERE Responses.UserID = 28
Trzecie pragnienie (nieosiągnięte):

Pokaż mi wszystkie ankiety, które NIE zostały zainicjowane przez użytkownika 28, a których użytkownik 28 jeszcze NIE odpowiedział ... SELECT * FROM Surveys INNER JOIN Odpowiedzi ON Surveys.SurveyID = Responses.SurveyID WHERE Surveys.UserID <> 28 AND Responses.UserID <> 28 [na przemian: WHERE NOT Surveys.UserID = 28 OR Responses.UserID = 28]

Trzecie zapytanie eliminuje rekord dla użytkownika 28, ale pojawią się inne instancje tego samego badania. Załóżmy na przykład, że użytkownik 29 odpowiedział na ankietę. Zostanie zwrócony wiersz, ponieważ WHERE nie zabrania rekordu użytkownika 29.

Pomyślałem o użyciu podzapytania - coś w rodzaju: SELECT * FROM Surveys WHERE Surveys.UserID <> 28 AND Surveys.SurveyID <> (SELECT Responses.SurveyID WHERE Responses.UserID = 28) - ale to nie działa, ponieważ pod-zapytanie może łatwo wygenerować więcej niż jeden wiersz.

Jakie jest rozwiązanie?

questionAnswers(2)

yourAnswerToTheQuestion