De meerdelige identifier > “ a.surveyid ” kan niet worden gebonden [gesloten ]

Gesloten. Deze vraag is off-topic . Het accepteert momenteel geen antwoorden.

Antwoord

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) 

Reacties

  • enkele syntaxisfouten Msg 102, niveau 15, staat 1, regel 4 Onjuiste syntaxis bij ' a '. Msg 102, niveau 15, staat 1, regel 6 Onjuiste syntaxis bij ') '
  • @smartestvega nu controleren

Antwoord

U moet surveyid niet a.surveyid. Omdat surveyusers as a declareren in sub-query zodat je geen toegang hebt tot a.surveyid in de hoofdzoekopdracht.

Reacties

  • er is geen surveyid-kolom in 360HRSurvey, daarom geeft dit een foutmelding
  • @SmartestVEGA wat wil je dat deze kolom retourneert ? Het getal 80?
  • ja, ik zal die where-clausule van de enquête-ID in de toekomst verwijderen, dus ik moet alle enquête-IDs die aan de hoofdfunctie zijn toegevoegd retourneren
  • daarvoor moet je gebruik join.

Answer

De reden voor de fout werd uitgelegd in Jaimin Sonis antwoord .

Aangezien u surveyid in het resultaat wilt opnemen en dit geen attribuut is van de [360HRSurvey] -tabel, kunt u SELECT 80 AS surveyid, * ... gebruiken voor deze specifieke zoekopdracht. Als de surveyid niet opgelost – in een complexere zoekopdracht – kunt u deelnemen aan de tabel met dit kenmerk. Ervan uitgaande dat deze tabel surveyusers is en dat er een FOREIGN KEY van [360HRSurvey] (sempid) dat REFERENCES surveyusers(EmpCode), de zoekopdracht kan worden herschreven:

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 ) ; 

Antwoord

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 

Mijn probleem opgelost

Reacties

  • De where deptid = 9 maakte geen deel uit van de oorspronkelijke zoekopdracht.
  • ja, ik heb intetionaly toegevoegd voor een wijziging in de bedrijfslogica, bedankt

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *