Select na mesma tabela e campo com variáveis diferentes

15/12/2018

0

Boa tarde jovens.
Tenho uma tabela que contém cadastro de materiais, tanto com nomes comerciais como com nomes genericos
Tenho códigos individuais pros comerciais e pros genericos, porém o campo para descrição do material é o mesmo.


Então o Material 15 Pode ter a descrição Buscopan e ter vinculado o material 30 com a descrição N-Butilescopolamina no cadastro
Fiz um select com full outer join porém só consigo listar a descrição do material genérico quando o comercial é igual ao genérico

Exemplo
select a.cd_materialcomercial , a.ds_material, a.cd_material_generico, b.ds_material from materiais a
full outer join materiais b on a.cd_materialcomerial=b.cd_material_generico



Não consigo obter a descrição quando o genérico é diferente do comercial, tentei fazer um subselect inicialmente mas também não consegui chegar a lugar algum.
Alguém teria alguma luz?


Obrigado
Diego

Diego

Responder

Post mais votado

16/12/2018

Acredito que você esteja fazendo o relacionamento errado.
Tente assim:
select
	a.cd_material, a.ds_material,
	coalesce(b.cd_material,'') material_generico,
	coalesce(b.ds_material,'') ds_generico
from
	material a 
left join
	material b on b.cd_material = a.cd_material_generico -- aqui estava invertido
where
	a.cd_material='211'

Emerson Nascimento

Emerson Nascimento
Responder

Mais Posts

15/12/2018

Alex Lekao

Oi Diego, boa tarde!!!

Não entendi muito bem, vc quer fazer uma listagem dos materiais, mas eh uma mesma tabela correto?

o material de codigo 15 e 30 estão na mesma tabela, correto?

Um select com group by não resolveria seu problema?

Por exemplo:

select
a.cd_materialcomercial ,
a.ds_material,
a.cd_material_generico
from materiais a
Group by a.cd_materialcomercial , a.ds_material,a.cd_material_generico

desta forma tudo q for exatamente igual em codigo e descrição aparecerao apenas uma vez.

Veja se é isto que vc quer e me informe.

Atenciosamente,
Responder

15/12/2018

Emerson Nascimento

publique os 2 registros do exemplo passado (se possível, todos os campos).
Responder

15/12/2018

Diego

Alex, boa noite.
Então, com um select simples não seria possível. Vou postar valores para ficar mais claro:
select cd_material, ds_material, cd_material_generico from material where cd_material='211'
o resultado seria
cd_material ds_material cd_material_generico
211 buscopan 33700
Porém preciso do ds_material do 33700 na mesma consulta, se eu fizer individualmente: select ds_material from material where cd_material='33700', tenho o DS_material dele N-Butilescopolamina

O que eu precisaria, seria:
cd_material ds_material cd_material_generico ds_materialgenerico
211 buscopan 33700 N-Butilescopolamina

Por isso, tentei:
select a.cd_material, a.ds_material, a.cd_material_generico, b.ds_material as ds_generico from material a
full outer join material b on a.cd_material=b.cd_material_generico

Porém o resultado é esse. ou seja, sem eu conseguir incluir a descrição do 33700

cd_material ds_material cd_material_generico ds_generico
211 Buscopan 20mg/ml (1ml) Inj. 33700 NULL



Oi Diego, boa tarde!!!

Não entendi muito bem, vc quer fazer uma listagem dos materiais, mas eh uma mesma tabela correto?

o material de codigo 15 e 30 estão na mesma tabela, correto?

Um select com group by não resolveria seu problema?

Por exemplo:

select
a.cd_materialcomercial ,
a.ds_material,
a.cd_material_generico
from materiais a
Group by a.cd_materialcomercial , a.ds_material,a.cd_material_generico

desta forma tudo q for exatamente igual em codigo e descrição aparecerao apenas uma vez.

Veja se é isto que vc quer e me informe.

Atenciosamente,
Responder

17/12/2018

Diego

Na mosca Emerson, o relacionamento estava invertido! Muito obrigado!


Acredito que você esteja fazendo o relacionamento errado.
Tente assim:
select
	a.cd_material, a.ds_material,
	coalesce(b.cd_material,'') material_generico,
	coalesce(b.ds_material,'') ds_generico
from
	material a 
left join
	material b on b.cd_material = a.cd_material_generico -- aqui estava invertido
where
	a.cd_material='211'




Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar