Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jhon Paulo

where em tabelas dependentes (LEFT JOIN)

Recommended Posts

Olá meu povo e minha pova :ermm:

 

Estou utilizando a seguinte consulta:

SELECT n_catalogo.cod, transacao.id_transacao, transacao.data
FROM n_catalogo
LEFT JOIN transacao ON n_catalogo.cod = transacao.cod
WHERE n_catalogo.id_catalogo =8

 

é o seguinte: Eu quero selecionar todos os itens da tabela n_catalogo, porém tenho a tabela transacao q é dependente de n_catalogo;

Eu gostaria q a linha que correspondesse a n_catalogo, na tabela transacao, fosse a que tem status=1;

 

exemplo: Na minha tabela n_catalogo tem o cod=1 com id_catalogo=8 e cod=2 com id_catalogo=8;

Na tabela transação eu tenho: id_transacao=5 com cod=1 e status=0, id_transacao=6 com cod=1 e status=1, id_transacao7 com cod=2 e status=0;

 

daí eu quero que quando fizer o select apareça o seguinte:

+---+-----------+----------+
|cod|id_transcao|   data   |
+---+-----------+----------+
| 1 |     6     |2012-05-16|
+---+-----------+----------+
| 2 |   NULL    |   NULL   |
+---+-----------+----------+

 

ou seja, selecionou o cod em n_catalogo e verificou se na transacao tinha alguma linha com o mesmo código e status=1;

se sim exibe, id da transacao e a data, caso não retorne null;

 

espero que tenham entendido, obrigado :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT c.id_catalogo as id, c.cod, t.id_transacao, t.data, t.status as status
FROM n_catalogo as c
LEFT JOIN transacao as t ON c.cod = t.cod
WHERE id = '8' AND status = '1'

 

Estou com um pouco d sono e sem pc, não sei se fiz a lógica certa..testa ae pra nós..

 

abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

rsrsrs, bela tentativa !

 

o problema é que quando você usa um aliás para uma tabela dependente dentro de um where, o LEFT JOIN perde sua função principal.

a sua consulta retorna:

+---+-----------+----------+
|cod|id_transcao|   data   |
+---+-----------+----------+
| 1 |     6     |2012-05-16|
+---+-----------+----------+

 

sua consulta deu a mesma coisa de usar um INNER JOIN

 

dps faça um teste quando tiver com tempo:

 

SELECT n_catalogo.cod, transacao.id_transacao, transacao.data
FROM n_catalogo
LEFT JOIN transacao ON n_catalogo.cod = transacao.cod
WHERE n_catalogo.id_catalogo =8

 

e

 

 

SELECT n_catalogo.cod, transacao.id_transacao, transacao.data
FROM n_catalogo
INNER JOIN transacao ON n_catalogo.cod = transacao.cod
WHERE n_catalogo.id_catalogo =8

 

você vai ver a grande diferença que dá.. :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

tentou isso

 

SELECT n_catalogo.cod, transacao.id_transacao, transacao.data
FROM n_catalogo
LEFT JOIN transacao ON n_catalogo.cod = transacao.cod AND n_catalogo.id_catalogo =8

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

hufersil, muito obrigado.

apesar do seu não ser oq eu queria, você me deu a faca e o queijo ao me mostrar que no ON do LEFT JOIN eu podia colocar um AND...

 

minha consulta ficou assim:

SELECT n_catalogo.cod, transacao.id_transacao, transacao.data
FROM n_catalogo
LEFT JOIN transacao ON n_catalogo.cod = transacao.cod AND transacao.status=1
WHERE n_catalogo.id_catalogo=8

 

agora la vou eu por mais uma madruga a dentro fazendo meu site rsrs :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo percebi depois o left. rss where off! kk

 

hufersil pensei quase isso..

SELECT n_catalogo.cod, transacao.id_transacao, transacao.data
FROM n_catalogo
LEFT JOIN transacao ON n_catalogo.cod = transacao.cod AND transacao.status =1 WHERE n_catalogo.id_catalogo = 8 

 

Rss. valeu jhon paulo já sacou né...

 

mandei a msg sem ver sua resp.

 

abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

rsrss valeeu mesmo assim :D ... vou te dar um (+1) pra ficar com a reputação melhor

 

ahh só pra você ter uma idéia do tamanho da consulta q eu uso (na realidade)vou mostrar:

SELECT c.cod, t. * , u.nome,u.sobrenome, tt.tipo
FROM n_catalogo as c
LEFT JOIN transacao as t ON c.cod = t.cod
AND t.status =1
LEFT JOIN usuario as u ON t.id_usuario = u.id
LEFT JOIN tipo_transacao as tt ON t.tipo = tt.id
WHERE c.id_catalogo =8
ORDER BY tt.id ASC

 

Mostrando registros 0 - 2 ( 3 total, Consulta levou 0.0025 segundos)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.