2010-07-20 6 views
2

Je tente de lier plusieurs tables dans SQL Server. Le code ci-dessous montre comment je lié les tables ensemble à ce jour:Syntaxe incorrecte à proximité du mot clé 'group' essayant de lier plusieurs tables dans SQL Server

select * 
from profile 
left join learner l on l.learnerid = profileid 
left join learner_levels ll on ll.learnerid = l.learnerid 
left join subjects s on s.subjectid = ll.subjectid 
left join learner_group lg on lg.learnerid = profileid 
where ll.archived = '0' and ll.completed = '0' 
order by surname asc` 

Ce que je veux faire est de filtrer les résultats par « groupId » qui est dans le tableau « groupe ». si j'ajoute que comme une « jointure gauche » déclaration, je reçois l'erreur indiqué dans le titre - «Syntaxe incorrecte près du mot clé « groupe » »

C'est ce que j'ai essayé:

select * 
from profile 
left join learner l on l.learnerid = profileid 
left join learner_levels ll on ll.learnerid = l.learnerid 
left join subjects s on s.subjectid = ll.subjectid 
left join learner_group lg on lg.learnerid = profileid 
left join group g on g.groupid = lg.learnerid 
where ll.archived = '0' and ll.completed = '0' and g.group_name = 'class 1' 
order by surname asc` 

C'est le résultat dans SQL Server Management studio:

Msg 156, niveau 15, état 1, ligne 7 syntaxe incorrecte près du mot-clé 'groupe'.

Où est-ce que je vais mal?

Répondre

5

Groupe est un mot réservé. Essayez d'utiliser un nom différent (pour la table). Ou mettez des crochets autour de [groupe].

+0

ajouté le carré de consoles sec avant que je ne reçoive mon message. Diable sournois. +1 –

+2

Je vous encourage fortement à changer le nom de la table si possible. Nous nous sommes heurtés à un problème comme celui-ci il n'y a pas longtemps et certaines opérations ne fonctionneront pas avec certains mots réservés, indépendamment des crochets. Pour nous, nous avons hérité d'une table [Merge] et il n'y avait aucun moyen de l'insérer dans cette table. –

+0

Merci! Comment puis-je créer un alias? Ou comment puis-je changer le nom? Je ne peux pas renommer la table dans la base de données car cela provoquerait le blocage du programme en cours d'exécution sur notre système. – Jeff

2

Groupe Wrap dans [] 's

Group est un mot réservé, comme Tobias dit. Ils doivent être changés ou enveloppés entre crochets.

select * from profile left join learner l on l.learnerid = profileid left join learner_levels ll on ll.learnerid = l.learnerid left join subjects s on s.subjectid = ll.subjectid left join learner_group lg on lg.learnerid = profileid left join [group] g on g.groupid = lg.learnerid where ll.archived = '0' and ll.completed = '0' and g.group_name = 'class 1' order by surname asc 
1

Si vous utilisez un mot réservé, comme le groupe, comme un nom de table, vous devez citer en utilisant des crochets:

LEFT JOIN [Group] g 
0

Utilisez [group] pour spécifier la table contre la réserve mot groupe

+0

Merci beaucoup, cela a résolu mon problème! :) – Jeff

0

« groupe » est un mot-clé, de sorte que vous devrez écrire cette ligne comme:

left join [group] g on g.groupid = lg.learnerid 
Questions connexes