Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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 :)
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á.. :)
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
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
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.
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)
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.