Fazendo consulta com três campos da Tebela em Lazarus

13/12/2017

0

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

Responder

Post mais votado

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

Luiz Vichiatto

Luiz Vichiatto
Responder

Mais Posts

18/12/2017

Helton Garrido

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
Responder

18/12/2017

Luiz Vichiatto

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
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar