Select with wrong result

0

I have the following select:

SELECT suprimento, public.tiposuprimento.descricao, capacidade, 
count(public.estoque.codigosuprimento) quantidade,estoqueminimo, sum (valorunitario) valor
FROM public.estoque,public.tiposuprimento, public.suprimento
WHERE public.estoque.codigosuprimento = public.suprimento.codigo and 
public.tiposuprimento.codigo = public.suprimento.codigotiposuprimento and usado = '0' 
  AND codigosuprimento = 155
GROUP BY suprimento, public.tiposuprimento.descricao,capacidade,estoqueminimo
ORDER BY suprimento 

That correctly returns the following information:

ButIneedtoaddwhatequipmentiscompatiblewiththissupply,soIcreatedthefollowingQuery

SELECTcodigosuprimento,array_to_string(array_agg(modelo),'|')ASmodeloFROMpublic.modelosuprimento,public.impressoramodeloWHEREpublic.impressoramodelo.codigo=public.modelosuprimento.codigomodeloANDcodigosuprimento=155GROUPBYcodigosuprimento;

Anditreturnsmetheequipmentcorrectly:

ButIamnotabletomergetheseQuerysormakethemintoaselectonly,wheneverItrytoadapttoaselectonlymyresultisinconsistentwiththecorrectinformation.I'vetrieditthisway:

SELECTsuprimento,public.tiposuprimento.descricao,capacidade,count(public.estoque.codigosuprimento)quantidade,estoqueminimo,sum(valorunitario)valor,array_to_string(array_agg(modelo),'|')ASmodeloFROMpublic.estoque,public.tiposuprimento,public.suprimento,public.modelosuprimento,public.impressoramodeloWHEREpublic.estoque.codigosuprimento=public.suprimento.codigoANDpublic.estoque.codigosuprimento=public.modelosuprimento.codigosuprimentoANDpublic.modelosuprimento.codigomodelo=public.impressoramodelo.codigoANDpublic.tiposuprimento.codigo=public.suprimento.codigotiposuprimentoANDusado='0'ANDpublic.modelosuprimento.codigosuprimento=155GROUPBYsuprimento,public.tiposuprimento.descricao,capacidade,estoqueminimoORDERBYsuprimento

AndIgotthefollowingresult:

That's incorrect, if you have any idea what I'm doing wrong or some hint of how to achieve this goal, thank you.

    
asked by anonymous 06.02.2018 / 18:59

2 answers

1

Given the problem is that you are using WHERE to relate the tables, and if 1 of them does not match, the value is not returned. Use JOINS to make this union.

Basically you have to understand the concept of left and right, for example:

Your table in FROM is your left table, that is, LEFT , when you make a JOIN .

FROM tabela1 X
LEFT OUTER JOIN tabela2 Y ON Y.campo1 = X.campo2

That is, you are bringing everything from the X table, plus the Y records that have binding to the X.

Now in:

FROM tabela1 X
RIGHT OUTER JOIN tabela2 Y ON Y.campo1 = X.campo2

You put everything on your right-hand table "Y" plus those of "X" that have a relationship with "Y".

The INNER only what is in common in the 2 tables, and the FULL behind EVERYTHING independent of the relations.

Link # 1 Link # 2

    
06.02.2018 / 19:26
1

I solved my problem by performing a subSelect:

SELECT public.estoque.codigosuprimento as cod ,suprimento, public.tiposuprimento.descricao, capacidade, 
count(public.estoque.codigosuprimento) quantidade,estoqueminimo, sum (valorunitario) valor, (SELECT array_to_string(array_agg(modelo),' | ') AS modelo
FROM public.modelosuprimento, public.impressoramodelo where 
public.impressoramodelo.codigo = public.modelosuprimento.codigomodelo and codigosuprimento = public.estoque.codigosuprimento group by codigosuprimento)
FROM public.estoque,public.tiposuprimento, public.suprimento
where public.estoque.codigosuprimento = public.suprimento.codigo and 
public.tiposuprimento.codigo = public.suprimento.codigotiposuprimento and usado = '0' 
group by suprimento, public.tiposuprimento.descricao,capacidade,estoqueminimo,public.estoque.codigosuprimento
order by suprimento 
    
06.02.2018 / 19:30