Comment puis-je corriger les noms de corrélation sur cette jonction sql?
j'ai besoin d'une jointure qui donne trois champs avec le même nom de deux tables différentes. Lorsque j'essaie d'exécuter ma requête sql, VS me donne l'erreur suivante.
les objets "PoliticalFigures" et "PoliticalFigures" dans la clause de FROM ont les mêmes noms exposés. Utilisez des noms de corrélation pour les distinguer.
j'ai essayé d'utiliser "AS" pour distinguer ces champs, mais je n'ai pas trouvé de solution. C'est la requête sql je suis en cours d'exécution:
SELECT Countries.Name AS Country, PoliticalFigures.Name AS President, PoliticalFigures.Name AS VicePresident FROM Countries
LEFT OUTER JOIN PoliticalFigures ON Countries.President_Id = PoliticalFigures.Id
LEFT OUTER JOIN PoliticalFigures ON Countries.VicePresident_Id = PoliticalFigures.Id
si ce n'est pas évident à partir du code, ce sont les tables.
- Pays: Id, Name, President_Id, VicePresident_Id.
- Chiffres Politiques: Id, Nom.
- table jointe: Pays, Président, Vice-Président
(notez que les tables et les champs de mon application ont des noms différents. Je les généralise pour rendre cet exemple plus clair et espérons-le, plus pertinents pour les autres.)
(Les outils que j'utilise sont Visual Web Developer 2010 Express et SQL Server 2008 Express.)
4 réponses
utilisez des alias de table pour chaque référence à PoliticalFigures
au lieu de:
SELECT
Countries.Name AS Country,
P.Name AS President,
VP.Name AS VicePresident
FROM
Countries
LEFT OUTER JOIN PoliticalFigures AS P ON Countries.President_Id = P.Id
LEFT OUTER JOIN PoliticalFigures AS VP ON Countries.VicePresident_Id = VP.Id
donnez à chaque référence au tableau un alias:
SELECT
Countries.Name AS Country,
P.Name AS President,
VP.Name AS VicePresident
FROM Countries
LEFT JOIN PoliticalFigures P ON Countries.President_Id = P.Id
LEFT JOIN PoliticalFigures VP ON Countries.VicePresident_Id = VP.Id
vous devez utiliser AS sur les tables pour leur donner des alias:
SELECT Countries.Name AS Country, Pres.Name AS President, Vice.Name AS VicePresident FROM Countries
LEFT OUTER JOIN PoliticalFigures AS Pres ON Countries.President_Id = Pres.Id
LEFT OUTER JOIN PoliticalFigures AS Vice ON Countries.VicePresident_Id = Vice.Id
dans les Standards SQL, le nom vernaculaire 'table alias' est appelé correlation name
et la langue vernaculaire colonne "alias" est appelé as clause
. Il semble que vous ayez confondu les deux termes.