Ir para o conteúdo
sent

Criar query

Mensagens Recomendadas

sent

boa tarde,

Estou com uma duvia a criar uma query, tenho duas tabelas com uma ligação 1 para n - cliente, carro - um cliente tem varios carros e os carros tem a ultima revisão

Assim:

selecionar todos os clientes que tenham todos os seus carros com a ultima revisão a null.

select 
distinct(C1.id) as id,
from
cliente C1 
inner join 
carro CA1
on C1.id = CA1.dono_id
where ultimRevi is null

o que consegui fazer foi isto, mas isto da-me os clientes eu tenho com pelo menos 1 carro sem ultimaRevisão, eu quero apenas os clientes que tenham todos os seus carros sem nenhuma revisão.

Acho que me faço entender.

Melhores Cumprimentos,  :biggrin:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rechousa

Olá,

Pelo que percebi, pretendes uma query que apresente os clientes que têm carros e que nenhum desses carros tem revisão, certo?

Experimenta isto (não testei o código - fiz utilizando tabelas temporárias em SQL Server e tentei adaptar para MySQL)

SELECT *
FROM
(
	SELECT CL.*,
		(SELECT COUNT(1) FROM carro CA WHERE CA.dono_id = CL.id) AS TotalCarros,
		(SELECT COUNT(1) FROM carro CA WHERE CA.dono_id = CL.id AND CA.ultimRevi IS NULL) AS NumCarrosSemRevisao
		FROM cliente CL
) A WHERE TotalCarros = NumCarrosSemRevisao AND TotalCarros > 0

Espero ter ajudado.


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

podes criar o SQL pela maneira inversa : quero todos os clientes que não estejam no grupo de pessoas que teem carros com revisão :

select id
    from clientes
where id not in (select distinct(dono_id)
                                from carros
                             where carros.dono_id is not null);


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rechousa

Viva,

podes criar o SQL pela maneira inversa : quero todos os clientes que não estejam no grupo de pessoas que teem carros com revisão :

select id
    from clientes
where id not in (select distinct(dono_id)
                                from carros
                             where carros.dono_id is not null);

Certo, mas dessa forma vai listar também os clientes que não têm carros (não sei se faz sentido esta situação ou não).

PS: Há um pormenor errado na query:

A condição é ultimRevi IS NOT NULL e não dono_id IS NOT NULL


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sent

Viva,Certo, mas dessa forma vai listar também os clientes que não têm carros (não sei se faz sentido esta situação ou não).

faz diferença...

se desse era menos uma subquery...

Obrigado pela ajuda :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.