PROBLEMAS NA CONSULTA SQL
Pessoal tenho uma dúvida, estou fazendo uma consulta sql e aparece um erro:
Erro de sintaxe (operador faltando) na expressão de consulta....
minha sql:
Select Pacientes.*, Categorias.descricao as nomecategoria, Profissionais.nome as nomeprofissional From Pacientes INNER JOIN Categorias on (Categorias.codigo = Pacientes.categoria) INNER JOIN Profissionais on (Profissionais.codigo = Pacientes.profissional) where Pacientes.ativo = True
onde tenho a tabela
Pacientes:
id (auto numeração)
nome (string)
categoria (numero)
profissional (numero)
Categorias:
codigo (numero)
descricao (string)
Profissionais
codigo (numero)
nome (string)
eu quero uma lista dos pacientes (tabela Pacientes) aparecendo os nomes da categoria e profissionais (mas aparece esse erro)
Agradeço qualquer ajuda
Obrigado
Erro de sintaxe (operador faltando) na expressão de consulta....
minha sql:
Select Pacientes.*, Categorias.descricao as nomecategoria, Profissionais.nome as nomeprofissional From Pacientes INNER JOIN Categorias on (Categorias.codigo = Pacientes.categoria) INNER JOIN Profissionais on (Profissionais.codigo = Pacientes.profissional) where Pacientes.ativo = True
onde tenho a tabela
Pacientes:
id (auto numeração)
nome (string)
categoria (numero)
profissional (numero)
Categorias:
codigo (numero)
descricao (string)
Profissionais
codigo (numero)
nome (string)
eu quero uma lista dos pacientes (tabela Pacientes) aparecendo os nomes da categoria e profissionais (mas aparece esse erro)
Agradeço qualquer ajuda
Obrigado
Embora você não tenha listado, acredito que sua tabela Pacientes, tem o campo Ativo que você usa no Where.
Então, tente fazer a seguinte mudança:
Então, tente fazer a seguinte mudança:
SELECT Pacientes.*, Categorias.descricao as nomecategoria, Profissionais.nome as nomeprofissional
From (Pacientes LEFT JOIN Categorias ON Pacientes.categoria = Categorias.codigo)
LEFT JOIN Profissionais ON Pacientes.profissional = Profissionais.codigo
WHERE Pacientes.ativo = True
geralmente este erro acontece pelo seguinte motivo, veja bem: tudo que vem depois do WHERE deve existir antes do FROM, então se ajuda do colega acima não resolver tente isso
bom repare que em azul estão os campos que faltaram.
ps: (Pacientes.*) significa que todos campos serão utilizados.
Select Pacientes.*, [txt-color=#0000f0]Categorias.Codigo[/txt-color], Categorias.descricao as nomecategoria, [txt-color=#0000f0]Profissionais.codigo[/txt-color],Profissionais.nome as nomeprofissional From Pacientes INNER JOIN Categorias on (Categorias.codigo = Pacientes.categoria) INNER JOIN Profissionais on (Profissionais.codigo = Pacientes.profissional) where Pacientes.ativo = True
bom repare que em azul estão os campos que faltaram.
ps: (Pacientes.*) significa que todos campos serão utilizados.
MARCELO-TREZE, sua informação está incorreta, pelo menos não é isso que diz o padrão SQL.
Você pode utilizar qq campo que esteja nas tabelas relacionadas no FROM, não precisa obrigatoriamente estar presente no SELECT. No SELECT apenas campos que irão ser retornados.
Você pode utilizar qq campo que esteja nas tabelas relacionadas no FROM, não precisa obrigatoriamente estar presente no SELECT. No SELECT apenas campos que irão ser retornados.
Certo entendi, ainda assim no caso dele os campos deverão ser inseridos pois se encontram nas comparações, ou esta afirmativa também não é correta?
Também nesse caso não é necessário.
Não manjo de todos os SGDB, mas o padrão SQL-ANSI diz não ser obrigatório.
Não manjo de todos os SGDB, mas o padrão SQL-ANSI diz não ser obrigatório.
Bom fica ai a minha dica peço ao colega que tem a duvida que a teste.
Obrigado Samuka pelas dicas.
Obrigado Samuka pelas dicas.
MARCELO-TREZE, magina. Já ralei muito com isso ... hoje começo a tirar alguns proveitos, de consultas com GroupBy, sub-consultas, essa maluquice toda.
SERGIOPASCOAL, só uma dica, se estiver em fase de criação do banco, aconselho a colocar o nome do campo (chave estrangeira) igual ao nome da chave primária.
Segue um exemplo de como poderia nomear as tabelas e os campos, pra ficar fácil de entender:
tbPacientes:
PacienteID (auto numeração) <<-- (PK) Chave Primaria
nome (string)
CategoriaID (numero) <<-- (FK) Chave Estrangeira
ProfissionalID (numero) <<-- (FK) Chave Estrangeira
ativo(boleano)
tbCategorias:
CategoriaID (numero) <<-- (PK) Chave Primaria
descricao (string)
tbProfissionais
ProfissionalID (numero) <<-- (PK) Chave Primaria
nome (string)
PK = Primary Key (Chave Primária)
FK = Foreign Key (Chave Estrangeira)
SERGIOPASCOAL, só uma dica, se estiver em fase de criação do banco, aconselho a colocar o nome do campo (chave estrangeira) igual ao nome da chave primária.
Segue um exemplo de como poderia nomear as tabelas e os campos, pra ficar fácil de entender:
tbPacientes:
PacienteID (auto numeração) <<-- (PK) Chave Primaria
nome (string)
CategoriaID (numero) <<-- (FK) Chave Estrangeira
ProfissionalID (numero) <<-- (FK) Chave Estrangeira
ativo(boleano)
tbCategorias:
CategoriaID (numero) <<-- (PK) Chave Primaria
descricao (string)
tbProfissionais
ProfissionalID (numero) <<-- (PK) Chave Primaria
nome (string)
PK = Primary Key (Chave Primária)
FK = Foreign Key (Chave Estrangeira)
Pessoal muito obrigado resolveu meu problema, agradeço a todos Samuka sua instrução funcionou...
Tópico encerrado , respostas não são mais permitidas