Abrufen von Datensätzen aus einer Tabelle, in der sich kein Datensatz in einer anderen befindet

SURVEYS Tabelle:
SurveyID
UserID
Question
Choice1
Choice2
Choice3
RESPONSES Tabelle:
UserID
SurveyID
Answer

Der erste Wunsch (erfüllt): Zeige mir alle Umfragen, die User 28 initiiert hat:

SELECT * 
  FROM Surveys 
 WHERE Surveys.UserID = 28

Der zweite Wunsch (erreicht): Zeige mir alle Umfragen, auf die User 28 geantwortet hat:

SELECT * 
  FROM Surveys 
INNER JOIN Responses ON Surveys.SurveyID = Responses.SurveyID 
 WHERE Responses.UserID = 28
Der dritte Wunsch (nicht erreicht):

Zeigen Sie mir alle Umfragen an, die NICHT von Benutzer 28 initiiert wurden und die Benutzer 28 noch NICHT beantwortet hat ... SELECT * FROM Umfragen INNER JOIN Responses ON Surveys.SurveyID = Responses.SurveyID WHERE Surveys.UserID <> 28 AND Responses.UserID <> 28 [alternativ: WHERE NOT Surveys.UserID = 28 OR Responses.UserID = 28]

Die dritte Abfrage beseitigt einen Datensatz für Benutzer 28, aber andere Instanzen derselben Umfrage werden angezeigt. Nehmen wir zum Beispiel an, dass Benutzer 29 die Umfrage beantwortet hat. Eine Zeile wird zurückgegeben, da das WHERE den Datensatz von Benutzer 29 nicht verbietet.

Ich habe überlegt, eine Unterabfrage zu verwenden - etwa: SELECT * FROM Surveys WHERE Surveys.UserID <> 28 AND Surveys.SurveyID <> (SELECT Responses.SurveyID WHERE Responses.UserID = 28) -, aber das funktioniert nicht, weil die Unterabfrage kann leicht mehr als eine Zeile erzeugen.

Was ist die Lösung?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage