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?