INNER JOIN pegando apenas o último código da segunda tabela

1,556 views
Skip to first unread message

Lasaro

unread,
Jul 22, 2012, 4:46:48 PM7/22/12
to ph...@googlegroups.com
Amigos,

Tenho uma tabela clientes.
Outra tabela boletos.
Cada cliente tem vários boletos.
Preciso selecionar todos os clientes e os últimos boletos de cada um deles.
Já tentei de todas as formas e não consegui, todas as formas que consegui ele seleciona todos os boletos de todos os clientes.

Alguém já conseguiu fazer isso sem uma segunda query?

--
Lásaro Carvalho - Fone: 21 7123-6930
Site: www.lasarocarvalho.com.br

Antes de imprimir, pense em sua responsabilidade e compromisso com o meio ambiente.


Tayron Miranda

unread,
Jul 23, 2012, 7:39:30 AM7/23/12
to ph...@googlegroups.com
Bom dia,

Será que fazendo um subselect não resolve seu problema não?

http://pastebin.com/wMBni1uV


\o


--
Você recebeu esta mensagem porque está inscrito no grupo "PHP MG" no grupos do Google.
Site oficial do grupo: http://www.phpmg.com
Para postar neste grupo, envie um e-mail para ph...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para phpmg-un...@googlegroups.com
Regras da lista: http://groups.google.com/group/phpmg/web/regras-da-lista
Para ver mais opções, acesse http://groups.google.com/group/phpmg



--
Tayron Miranda - Analista e Desenvolvedor WEB

 (31) 9121-7921 
 (31) 8613-8615

www.tayronmiranda.com.br
Skype: tayron.s.miranda


Ao encaminhar esta mensagem, por favor:

1. Apague o MEU endereço eletrônico;
2. Coloque o endereço de email de seus amigos no CCO (COM CÓPIA  OCULTA),
assim você evita que nossos emails caiam em spam.


samir gomes da Silva

unread,
Jul 23, 2012, 7:42:38 AM7/23/12
to ph...@googlegroups.com
segunda query que você fala é "sub query"?

pois a solução que eu vejo é essa...

Rafael Mariano

unread,
Jul 23, 2012, 7:36:48 AM7/23/12
to ph...@googlegroups.com
Bom dia Lasaro,

Pra pegar o ultimo boleto vc poderia fazer algo do tipo...

select * from clientes
inner join boletos b on ....
where
b.id in (select max(b2.id) from boletos b2 where b.id = b2.id)

Abraço.

Em 22 de julho de 2012 17:46, Lasaro <lasaroc...@gmail.com> escreveu:
--
Você recebeu esta mensagem porque está inscrito no grupo "PHP MG" no grupos do Google.
Site oficial do grupo: http://www.phpmg.com
Para postar neste grupo, envie um e-mail para ph...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para phpmg-un...@googlegroups.com
Regras da lista: http://groups.google.com/group/phpmg/web/regras-da-lista
Para ver mais opções, acesse http://groups.google.com/group/phpmg



--
RAFAEL MARIANO FERREIRA

Julio Cezar

unread,
Jul 23, 2012, 7:56:35 AM7/23/12
to ph...@googlegroups.com
Não daria para fazer utilizando ORDER BY ,  DESC, LIMIT não?





Em 22 de julho de 2012 17:46, Lasaro <lasaroc...@gmail.com> escreveu:
--
Você recebeu esta mensagem porque está inscrito no grupo "PHP MG" no grupos do Google.
Site oficial do grupo: http://www.phpmg.com
Para postar neste grupo, envie um e-mail para ph...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para phpmg-un...@googlegroups.com
Regras da lista: http://groups.google.com/group/phpmg/web/regras-da-lista
Para ver mais opções, acesse http://groups.google.com/group/phpmg



--
Julio Cezar da Silva
http://www.soltein.com.br


Alysson

unread,
Jul 23, 2012, 8:13:02 AM7/23/12
to ph...@googlegroups.com
SELECT cliente.id, cliente.nome, boleto.id, boleto.numero
FROM cliente
JOIN boleto ON cliente.id = boleto.id_cliente
ORDER BY boleto.id DESC
LIMIT 0 , 1




Alex C. Souza

unread,
Jul 23, 2012, 8:07:29 AM7/23/12
to ph...@googlegroups.com
group by + order by

select * from clientes inner join boletos on boletos.id_cliente = clientes.id_cliente group by clientes.id_cliente order by boletos.id_boleto DESC

acho que pode funcionar tb...
/*-----------------------------
Alex C. Souza
Desenvolvedor Web
31 8539 8683
-----------------------------*/

Lasaro Gmail

unread,
Jul 24, 2012, 9:16:50 AM7/24/12
to ph...@googlegroups.com

Rafael,

 

Fiz assim

SELECT*
FROM clientes
INNERJOIN boletos b ON clientes.codigo = b.codigo_cliente
WHERE b.codigo
IN (


SELECT
max( b2.codigo )
FROM boletos b2
WHERE b.codigo = b2.codigo

)

 

Porém mesmo assim selecionou todos os boletos de todos os clientes.


Nenhum vírus encontrado nessa mensagem.
Verificado por AVG - www.avgbrasil.com.br
Versão: 2012.0.2197 / Banco de dados de vírus: 2437/5149 - Data de Lançamento: 07/23/12

Rafael Mariano

unread,
Jul 24, 2012, 10:56:26 AM7/24/12
to ph...@googlegroups.com
E ai lasaro,

ve se só assim te atende

SELECT
FROM clientes
INNERJOIN boletos b ON clientes.codigo = b.codigo_cliente
WHERE b.codigo
IN (


SELECT 
max( b2.codigo ) 
FROM boletos b2

)

Lasaro

unread,
Jul 24, 2012, 12:39:46 PM7/24/12
to ph...@googlegroups.com
Deu certo não, pegou apenas um cliente e um boleto.
Preciso que pegue todos os clientes e o último boleto de cada cliente.

Alex C. Souza

unread,
Jul 25, 2012, 7:18:05 AM7/25/12
to ph...@googlegroups.com
Lasaro, usando "group by" não funcionou?

Vinícius Bertoldi

unread,
Jul 25, 2012, 11:42:00 AM7/25/12
to ph...@googlegroups.com
Lásaro,

Seguinte, o sql que voce usou, vai trazer todos os boletos mesmo:

SELECT
FROM clientes
INNERJOIN boletos b ON clientes.codigo = b.codigo_cliente
WHERE b.codigo
IN (


SELECT 
max( b2.codigo ) 
FROM boletos b2
WHERE b.codigo = b2.codigo

)


Porque voce esta ligando o boleto b com boleto b2, ai tras todo mundo.


Voce tem o código do cliente na tabela de boleto, certo?

Então pra trazer so o ultimo boleto de cada cliente:


SELECT
FROM clientes
INNERJOIN boletos b ON clientes.codigo = b.codigo_cliente
WHERE b.codigo
IN (


SELECT 
max( b2.codigo ) 
FROM boletos b2

WHERE b.codigo_cliente = clientes.codigo_cliente

)


Desse jeito o seu subselevt vai traz apenas um boleto por cliente.


Veja se funciona e retorna por favor.



Vinícius Bertoldi


Em 24 de julho de 2012 13:39, Lasaro <lasaroc...@gmail.com> escreveu:

Vinícius Bertoldi

unread,
Jul 25, 2012, 11:42:55 AM7/25/12
to ph...@googlegroups.com
Ops,

Corrigindo:

SELECT
FROM clientes
INNERJOIN boletos b ON clientes.codigo = b.codigo_cliente
WHERE b.codigo
IN (


SELECT 
max( b2.codigo ) 
FROM boletos b2
WHERE b2.codigo_cliente = clientes.codigo_cliente

)



Vinícius Bertoldi


Em 24 de julho de 2012 13:39, Lasaro <lasaroc...@gmail.com> escreveu:

Alex C. Souza

unread,
Jul 25, 2012, 12:42:34 PM7/25/12
to ph...@googlegroups.com
parece correto...

Lasaro Gmail

unread,
Jul 25, 2012, 4:41:13 PM7/25/12
to ph...@googlegroups.com

Valeu,

 

Vinícius,

 

Da forma abaixo:

 

SELECT *

FROM clientes

INNER JOIN boletos b ON clientes.codigo = b.codigo_cliente

WHERE b.codigo

IN (

SELECT max( b2.codigo )

FROM boletos b2

WHERE b2.codigo_cliente = clientes.codigo

)

 

Deu certo.

 

Ab,

Lásaro

Versão: 2012.0.2197 / Banco de dados de vírus: 2437/5154 - Data de Lançamento: 07/25/12

Reply all
Reply to author
Forward
0 new messages