join interno postgreSQL
-
06-07-2019 - |
Domanda
Ho una query SQL
select * from "Roles" Join "Users" On "Roles".Role="Users".RoleId
restituisce la colonna di errore Roles.role non esiste
query
select * from "Roles" Join "Users" On Roles.Role=Users.RoleId
errore di restituzione mancante nella voce della clausola FROM per la tabella "ruoli"
come posso risolvere questo problema? lavoro sempre con ms sql
Soluzione
Non è possibile utilizzare il nome Ruoli nella condizione di join. Internamente tutti i nomi di tabella come ruoli, ruoli, ruoli e RoLeS vengono convertiti in ruoli (lettere minuscole). Quando usi "Ruoli", "RUOLI", "Ruoli", "RoLeS" il nome viene usato esattamente come hai scritto (nessuna conversione minuscola), quindi nella parte FROM vengono presi " Ruoli " e " Utenti " tabelle e nella condizione di join i nomi delle tabelle sono ruoli e utenti e tali tabelle non esistono.
Il modo semplice è usare solo i nomi delle tabelle senza " " ;, basta usare ruoli semplici invece di " Ruoli " così puoi scrivere ruoli o ruoli indipendentemente dalle lettere minuscole / maiuscole.
Altri suggerimenti
scrivilo in questo modo:
select * from Roles INNER JOIN Users On (Roles.Role= Users.RoleId)
controlla INNER JOIN due tabelle per maggiori informazioni. ..
oppure puoi usare il modo semplice che funziona con la maggior parte dei DBMS:
select * from Roles,Users where Roles.Role= Users.RoleId
Sospetto che dovessi scrivere " Roles ". & Role; Role " = " Users ". " RoleId "
, perché si lamenta di non riuscire a trovare il nome della colonna minuscola.
Come altri hanno già detto, di solito è più semplice creare tutto in lettere minuscole, anche se si usano maiuscole e minuscole nelle query: quindi se la tabella viene chiamata "ruoli" e la colonna "ruolo" ecc. puoi scrivere Roles.Role = Users.RoleId
e gli identificatori verranno convertiti in minuscolo dietro le quinte.