Geschlossen. Diese Frage ist nicht zum Thema . Derzeit werden keine Antworten akzeptiert.
Antwort
SELECT a.surveyid,* FROM [360HRSurvey] inner join ( SELECT a.EmpCode,a.surveyid FROM surveyusers a where a.surveyid = 80 and a.EmpCode NOT IN (SELECT p.EmpID FROM empsurveyselection p WHERE p.surveyid =80)) a on a.EmpCode=sempid where empid = ( SELECT empid from [360HRSurveyEmployee] where surveyid = 80)
Kommentare
- einige Syntaxfehler Meldung 102, Ebene 15, Status 1, Zeile 4 Falsche Syntax in der Nähe von ' a '. Meldung 102, Ebene 15, Status 1, Zeile 6 Falsche Syntax in der Nähe von ') '
- @smartestvega Jetzt prüfen
Antwort
Sie müssen surveyid
verwenden, nicht a.surveyid
. Da surveyusers as a
in sub-query
deklariert ist, können Sie in der Hauptabfrage nicht auf a.surveyid
zugreifen.
Kommentare
- In 360HRSurvey gibt es keine Umfrage-ID-Spalte. Daher wird der Fehler
- @SmartestVEGA ausgegeben. Was soll diese Spalte zurückgeben? ? Die Nummer 80?
- Ja, ich werde diese where-Klausel der Umfrage-ID in Zukunft entfernen, daher muss ich alle Umfrage-IDs zurückgeben, die an die Hauptfunktion
- angehängt sind, die Sie benötigen Verwenden Sie join.
Antwort
Der Grund für den Fehler wurde in Jaimin Sonis Antwort .
Da Sie surveyid
in das Ergebnis aufnehmen möchten, ist dies kein Attribut des [360HRSurvey]
Tabelle, Sie können einfach SELECT 80 AS surveyid, * ...
für diese bestimmte Abfrage verwenden. Wenn die surveyid
nicht ist In einer komplexeren Abfrage können Sie jedoch der Tabelle mit diesem Attribut beitreten. Angenommen, diese Tabelle ist surveyusers
und es gibt eine FOREIGN KEY
Ab [360HRSurvey] (sempid)
REFERENCES surveyusers(EmpCode)
kann die Abfrage neu geschrieben werden:
SELECT a.surveyid, hrs.* FROM [360HRSurvey] AS hrs JOIN surveyusers AS a ON a.EmpCode = hrs.sempid WHERE a.surveyid = 80 -- this condition can be altered or removed AND a.EmpCode NOT IN ( SELECT p.EmpID FROM empsurveyselection p WHERE p.surveyid = a.surveyid ) AND a.empid = ( -- unclear if it"s a.empid or hrs.empid SELECT hrsemp.empid FROM [360HRSurveyEmployee] AS hrsemp WHERE hrsemp.surveyid = a.surveyid ) ;
Antwort
SELECT su.surveyid,b.* FROM surveyusers SU RIGHT JOIN (SELECT * FROM [360HRSurvey] where sempid NOT IN ( SELECT a.EmpCode FROM surveyusers a where a.EmpCode IN (SELECT p.EmpID FROM empsurveyselection p where deptid = 9 ) and empid IN ( SELECT empid from [360HRSurveyEmployee] ))) B ON su.EmpCode = b.sempid Order by surveyid desc
hat es selbst behoben
Kommentare
- Die
where deptid = 9
war nicht Teil der ursprünglichen Abfrage. - Ja, ich habe es für eine Änderung der Geschäftslogik hinzugefügt, danke