Lidentifiant en plusieurs parties > “ a.surveyid ” na pas pu être lié [fermé ]

Fermé. Cette question est hors sujet . Il naccepte pas les réponses actuellement.

Réponse

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) 

Commentaires

  • quelques erreurs de syntaxe Msg 102, Niveau 15, État 1, Ligne 4 Syntaxe incorrecte près de ' a '. Msg 102, niveau 15, état 1, ligne 6 Syntaxe incorrecte près de ') '
  • @smartestvega vérifier maintenant

Réponse

Vous devez utiliser surveyid pas a.surveyid. Parce que surveyusers as a déclare dans sub-query donc vous ne pouvez pas accéder à a.surveyid dans la requête principale.

Commentaires

  • il ny a pas de colonne surveyid dans 360HRSurvey donc cela donnera une erreur
  • @SmartestVEGA que voulez-vous que cette colonne renvoie ? Le nombre 80?
  • oui, je supprimerai la clause where de lID de lenquête à lavenir, je dois donc renvoyer tous les identifiants de lenquête ajoutés à la fonction principale
  • pour cela, vous devez utilisez join.

Réponse

La raison de lerreur a été expliquée dans Réponse de Jaimin Soni .

Puisque vous voulez inclure surveyid dans le résultat et que ce nest pas un attribut du [360HRSurvey], vous pouvez simplement utiliser SELECT 80 AS surveyid, * ... pour cette requête particulière. Si surveyid nest pas corrigé cependant – dans une requête plus complexe – vous pouvez joindre à la table qui a cet attribut. En supposant que cette table est surveyusers et quil y a un FOREIGN KEY de [360HRSurvey] (sempid) que REFERENCES surveyusers(EmpCode), la requête peut être réécrite:

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

Réponse

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 

Je lai corrigé moi-même

Commentaires

  • Le where deptid = 9 ne faisait pas partie de la requête dorigine.
  • oui, jai ajouté intetionaly pour un changement de logique métier merci

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *