Vícedílný identifikátor > “ a.surveyid ” nelze svázat [uzavřeno ]

Uzavřeno. Tato otázka je mimo téma . Momentálně nepřijímá odpovědi.

Odpověď

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) 

Komentáře

  • některé chyby syntaxe Zpráva 102, úroveň 15, stav 1, řádek 4 Nesprávná syntaxe v blízkosti ' a '. Zpráva 102, úroveň 15, stav 1, řádek 6 Nesprávná syntaxe poblíž ') '
  • @smartestvega zkontrolovat nyní

Odpověď

Musíte použít surveyid ne a.surveyid. Protože surveyusers as a deklarovat v sub-query, takže v hlavním dotazu nemáte přístup k a.surveyid.

Komentáře

  • ve 360HRSurvey není žádný sloupec surveyid, proto to způsobí chybu
  • @SmartestVEGA co chcete, aby tento sloupec vrátil ? Číslo 80?
  • ano, v budoucnu odstraním klauzuli where where of survey id, takže musím vrátit všechna id průzkumu připojená k hlavní funkci
  • k tomu musíte použijte join.

Odpověď

Důvod chyby byl vysvětlen v Odpověď Jaimin Soni .

Protože chcete do výsledku zahrnout surveyid, nejedná se o atribut [360HRSurvey] tabulka, můžete pro tento konkrétní dotaz použít SELECT 80 AS surveyid, * .... Pokud surveyid není opraveno – ve složitějším dotazu – můžete se připojit k tabulce, která má tento atribut. Za předpokladu, že tato tabulka je surveyusers a že existuje FOREIGN KEY z [360HRSurvey] (sempid) že REFERENCES surveyusers(EmpCode) lze dotaz přepsat:

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

Odpověď

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 

Opraveno to myslíf

Komentáře

  • where deptid = 9 nebyl součástí původního dotazu.
  • ano, díky změně obchodní logiky jsem přidal interně

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *