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

20
demandé sur Logical Fallacy 2012-01-22 00:50:30

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
32
répondu Michael Berkowski 2012-01-21 20:53:09

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
18
répondu Bohemian 2012-01-21 20:52:24

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
2
répondu Luis 2012-01-21 21:08:41

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.

1
répondu onedaywhen 2012-01-23 08:25:13