Fazendo consulta com três campos da Tebela em Lazarus

Delphi

13/12/2017

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:

    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

Helton Garrido

Curtidas 0

Melhor post

Luiz Vichiatto

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

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
GOSTEI 0
Luiz Vichiatto

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.

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
POSTAR