Fazendo consulta com três campos da Tebela em Lazarus
Boa tarde a todos, gostaria de fazer uma consulta entre três campos da minha tabela sql em Lazarus, ou seja, em três colunas, pois o código que estou usando não esta dando certo, pois o mesmo esta apresentado erro. Veja o código abaixo:
Estou desenvolvendo um sistema de cadastro que venha a ser cadastrado as especialidades de cada pessoa, sendo que eu quero consultar por especialidade. Desde já agradeço pela ajuda dos amigos...
DM.tbCadMorador.Close; DM.tbCadMorador.SQL.Clear; DM.tbCadMorador.SQL.Add('SELECT ESPECIALIDADE_1, ESPECIALIDADE_2, ESPECIALIDADE_3 FROM CADMORADOR'); DM.tbCadMorador.Open;
Estou desenvolvendo um sistema de cadastro que venha a ser cadastrado as especialidades de cada pessoa, sendo que eu quero consultar por especialidade. Desde já agradeço pela ajuda dos amigos...
Helton Garrido
Curtidas 0
Melhor post
Luiz Vichiatto
18/12/2017
Não sei como é o seu modelo, o interessante é colocar uma tabela 1->M (um para muitos) , você tem uma tabela CADMORADOR, CADESPECIALIDADE e uma tabela com CADMORADOR_ESPECIALIDADE, assim você poderá cadastrar quantas especialidades forem necessárias e a consulta fica mais simples
SELECT MOR.nomeMORADOR, ESP.desceESPECIALIDADE FROM CADMORADOR MOR INNER JOIN CADESPECIALIDADE ESP ON ESP.codigoESPECIALIDADE = MOR.codESPECIALIDADEfk
GOSTEI 1
Mais Respostas
Helton Garrido
13/12/2017
Bom dia meu caro Luiz Vichiatto
Existem duas tabelas uma Morador e a outra Especialidades, sendo que a Tabela Morador irar receber os dados da Tabela Especialidade e isto já esta sendo feito, o que eu não estou conseguindo e fazer é a consulta entre as colunas especialidade_1, Especialidade_2 e Especialidade_3 que já estão na Tabela Morador. Existem dados chamados dentista em cada uma das colunas e o que eu queria é que mediante a consulta entre as três colunas especialidade_1, Especialidade_2 e Especialidade_3 me retornassem na gride nomes das pessoas que pediram a especialidade dentista. e isso eu não estou conseguindo
Existem duas tabelas uma Morador e a outra Especialidades, sendo que a Tabela Morador irar receber os dados da Tabela Especialidade e isto já esta sendo feito, o que eu não estou conseguindo e fazer é a consulta entre as colunas especialidade_1, Especialidade_2 e Especialidade_3 que já estão na Tabela Morador. Existem dados chamados dentista em cada uma das colunas e o que eu queria é que mediante a consulta entre as três colunas especialidade_1, Especialidade_2 e Especialidade_3 me retornassem na gride nomes das pessoas que pediram a especialidade dentista. e isso eu não estou conseguindo
GOSTEI 0
Luiz Vichiatto
13/12/2017
Então, acho que entendi, você quer comparar em qual dos três campos está preenchido a especialidade (não importando em qual campo) e retornar a especialidade, isto?
Pode ocorrer de mais de um ter a mesma especialidade?
Pode utilizar clausula case, dependendo da SGBD, claro tem a sintaxe correta para utilização.
No MSSQL tem uma função que compara campos e retorna somente o que está preenchido, mas tem que pesquisar como poderá funcionar
Firebir --->>> https://www.devmedia.com.br/o-case-do-firebird/1489
MSSQL --->>> https://www.devmedia.com.br/trabalhando-com-expressoes-case-e-a-funcao-iif-no-t-sql/31292
Segue uma possível ideia do que terá que fazer, se este for o teu caso.
Espero que isto já te de uma direção
Att
Pode ocorrer de mais de um ter a mesma especialidade?
Pode utilizar clausula case, dependendo da SGBD, claro tem a sintaxe correta para utilização.
No MSSQL tem uma função que compara campos e retorna somente o que está preenchido, mas tem que pesquisar como poderá funcionar
Firebir --->>> https://www.devmedia.com.br/o-case-do-firebird/1489
MSSQL --->>> https://www.devmedia.com.br/trabalhando-com-expressoes-case-e-a-funcao-iif-no-t-sql/31292
Segue uma possível ideia do que terá que fazer, se este for o teu caso.
SELECT MOR.NOME CASE WHEN ESPECIALIDADE_1 IN (SELECT ESP.cadESPECIALIDADE FROM ESPECIALIDADE ESP WHERE ESP.COD_ESPECIALIDADE = codigo_especialidade_procurada) THEN (SELECT ESP.cadESPECIALIDADE FROM ESPECIALIDADE ESP WHERE ESP.COD_ESPECIALIDADE = codigo_especialidade_procurada) ) WHEN ESPECIALIDADE_2 IN (SELECT ESP.cadESPECIALIDADE FROM ESPECIALIDADE ESP WHERE ESP.COD_ESPECIALIDADE = codigo_especialidade_procurada) THEN (SELECT ESP.cadESPECIALIDADE FROM ESPECIALIDADE ESP WHERE ESP.COD_ESPECIALIDADE = codigo_especialidade_procurada) ) ESPECIALIDADE_3 IN (SELECT ESP.cadESPECIALIDADE FROM ESPECIALIDADE ESP WHERE ESP.COD_ESPECIALIDADE = codigo_especialidade_procurada) THEN (SELECT ESP.cadESPECIALIDADE FROM ESPECIALIDADE ESP WHERE ESP.COD_ESPECIALIDADE = codigo_especialidade_procurada) ) ELSE '' END
Espero que isto já te de uma direção
Att
GOSTEI 1