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?