jointure interne postgreSQL
-
06-07-2019 - |
Question
j'ai une requête SQL
select * from "Roles" Join "Users" On "Roles".Role="Users".RoleId
retourne la colonne d’erreur Roles.role n’existe pas
requête
select * from "Roles" Join "Users" On Roles.Role=Users.RoleId
retourne une entrée de la clause FROM manquante pour la table "rôles"
comment puis-je résoudre ce problème? je travaille toujours avec ms sql
La solution
Vous ne pouvez pas utiliser le nom Roles dans la condition de jointure. En interne, tous les noms de table tels que Rôles, ROLES, rôles, RoLeS sont convertis en rôles (minuscules). Lorsque vous utilisez "Roles", "ROLES", "rôles", "RoLeS" le nom est utilisé exactement comme vous l'avez écrit (pas de conversion en minuscule), ainsi dans la partie FROM sont pris "Roles". et " Utilisateurs " tables et dans la condition de jointure, les noms de table sont des rôles et des utilisateurs, de tels tabulations n'existent pas.
La méthode la plus simple consiste à utiliser uniquement les noms de table sans """, utilisez simplement des rôles simples au lieu de "Roles". afin que vous puissiez écrire des rôles ou des rôles indépendamment des lettres minuscules / majuscules.
Autres conseils
écrivez-le comme ceci:
select * from Roles INNER JOIN Users On (Roles.Role= Users.RoleId)
consultez INNER JOIN deux tables pour plus d'informations. ..
ou vous pouvez utiliser la façon simple dont cela fonctionne avec la plupart des SGBD:
select * from Roles,Users where Roles.Role= Users.RoleId
Je soupçonne que vous deviez écrire "Rôles". "Rôle". = "Utilisateurs". "RoleId"
, car il se plaint de ne pas pouvoir trouver le nom de la colonne en minuscule.
Comme d'autres l'ont déjà mentionné, il est généralement plus facile de tout créer en minuscule, même si vous utilisez une casse mixte dans les requêtes: donc, si la table s'appelle "Rôles". et la colonne " rôle " etc. vous pouvez écrire Roles.Role = Users.RoleId
et les identifiants seront convertis en minuscules dans les coulisses.