Ajuda com consulta

Pessoal, bom dia.

Tenho a seguinte estrutura de tabelas no banco de dados.

Banco

sendo assim, realizei a seguinte consulta para listar as Os’s e o colaborador que está atendendo a solicitação.

select
	os.Cod as codOs,
    os.Descricao as Problema,
    t.Cod as codTipo,
    t.Descricao as Tipo,
    s.Cod as CodSetor,
    s.Descricao as Setor,
    p.Cod as CodPrioridade,
    p.Descricao as Prioridade,
    st.Cod as codSituacao,
    st.Descricao as Situacao,
    l.Cod as codLoguin,
    l.Loguin as Responsavel  
from 
	statusos as sos
join os as os on (sos.FkOs=os.Cod)
join tipo as t on(sos.FkTipo=t.Cod)
join setor as s on(sos.FkSetor=s.Cod)
join prioridade as p on (sos.FkPrioridade=p.Cod)
join situacao as st on (sos.FkSituacao=st.Cod)
join loguin as l on (sos.FkLoguin=l.Cod);

Essa consulta me traz o seguinte resultado.

Porém, gostaria de listar tambem as os’s que estão abertas porém não possuem um loguin(Colaborador) vinculado.

Espero ter sido claro quanto ao meu problema, desde já agraço.

Vamos lá, existem algumas coisas nos JOIN que são bem bacanas. Uma delas é o LEFT JOIN, que permite que você faça pesquisas em duas ou mais tabelas e defina que você quer todos os resultados MESMO QUE o que você definiu para as tabelas Á ESQUERDA estejam vazios (o famoso nulo).

Por isso, creio que isso

select
	os.Cod as codOs,
os.Descricao as Problema,
t.Cod as codTipo,
t.Descricao as Tipo,
s.Cod as CodSetor,
s.Descricao as Setor,
p.Cod as CodPrioridade,
p.Descricao as Prioridade,
st.Cod as codSituacao,
st.Descricao as Situacao,
l.Cod as codLoguin,
l.Loguin as Responsavel  
from 
	statusos as sos
join os as os on (sos.FkOs=os.Cod)
join tipo as t on(sos.FkTipo=t.Cod)
join setor as s on(sos.FkSetor=s.Cod)
join prioridade as p on (sos.FkPrioridade=p.Cod)
join situacao as st on (sos.FkSituacao=st.Cod)
LEFT JOIN loguin as l on (sos.FkLoguin=l.Cod);

Deva funcionar

Obrigado pela tentaiva, mas executei a consulta e obtive o mesmo resultado postado anteriormente.

Veja, o problema pode não ser o left join no loguin (ótimo nome para uma tabela).
Pode haver alguma validação nos demais joins que você tem que estejam ligados a OS.
Aliás, eu não consigo entender por que a ligação entre OS e seus respectivo responsavel é uma tabela chamada STATUS_OS, mas, ok, eu não conheço os pormenores desses requisitos. De qualquer forma, reveja toda a consulta, vá montando a mesma parte a parte, afinal, só o LEFT JOIN vai resolver este problema.

Desculpe, a falta de experiencia sempre fala mais alto, vou refazer essa consulta aqui, se conseguir posto o resultado.

Isso não é problema. Estamos todos aprendendo, sempre.
Agora, veja, você deve ter requisitos, deve ter uma especificação para estas tabelas.
Por exemplo, cada OS tem 0 ou 1 responsável, sendo assim, OS recebe uma FK de RESPONSAVEL, o que facilita muito na consulta.
Mas, segue aí.

1 curtida

Rapaz, obrigado pela dica. Deixei o código dessa forma:

select
	os.Cod as codOs,
    os.Descricao as Problema,
    t.Cod as codTipo,
    t.Descricao as Tipo,
    s.Cod as CodSetor,
    s.Descricao as Setor,
    p.Cod as CodPrioridade,
    p.Descricao as Prioridade,
    st.Cod as codSituacao,
    st.Descricao as Situacao,
    l.Loguin as Responsavel
from 
	os as os
right join tipo as t on(os.FkTipo=t.Cod)
join setor as s on(os.FkSetor=s.Cod)
join prioridade as p on (os.FkPrioridade=p.Cod)
left join situacao as st on (os.FkSituacao=st.Cod)
left join statusos as sos on (sos.FkOs=os.Cod)
left join loguin as l on (sos.FkLoguin=l.Cod);

e consegui o resultado que queria