AJUDA COM SELECT
Olá!
já tentei de várias formas e não consigo fazer o select que preciso...
tenho duas tabelas... PEDIDO e PEDIDOSTATUS
PEDIDO tem os campos e valores:
Codigo, Data, Valor, Vendedor
1, 12/11/2013, 100, Paulo
PEDIDOSTATUS tem os campos e valores:
Codigo, CodPedido, Descricao
1, 1, PREENCHENDO
2, 1, FINALIZADO
3, 1, PRODUÇÃO
4, 1, ENTREGUE
agora, eu gostaria de fazer um select com os dados da tabela PEDIDO, e o campo DESCRICAO. Lembrando que eu quero apenas o último status cadastrado, que no exemplo seria [Ô]ENTREGUE[Ô]. Portanto o retorno teria que ser:
Codigo, Data, Valor, Vendedor, Status
1, 12/11/2013, 100, Paulo, ENTREGUE
esse select até consegui fazer, porém preciso ainda colocar filtro no status, no qual não consigo de maneira alguma! Por exemplo, eu quero visualizar apenas os pedidos que estão em PRODUÇÃO... como eu faço isso ?
já tentei de várias formas e não consigo fazer o select que preciso...
tenho duas tabelas... PEDIDO e PEDIDOSTATUS
PEDIDO tem os campos e valores:
Codigo, Data, Valor, Vendedor
1, 12/11/2013, 100, Paulo
PEDIDOSTATUS tem os campos e valores:
Codigo, CodPedido, Descricao
1, 1, PREENCHENDO
2, 1, FINALIZADO
3, 1, PRODUÇÃO
4, 1, ENTREGUE
agora, eu gostaria de fazer um select com os dados da tabela PEDIDO, e o campo DESCRICAO. Lembrando que eu quero apenas o último status cadastrado, que no exemplo seria [Ô]ENTREGUE[Ô]. Portanto o retorno teria que ser:
Codigo, Data, Valor, Vendedor, Status
1, 12/11/2013, 100, Paulo, ENTREGUE
SELECT p.Codigo, p.Valor, p.data, p.Vendedor (select descricao from pedidostatus x where x.CodPedido = p.codigo order by codigo desc limit 1) as Status FROM Pedidos p
esse select até consegui fazer, porém preciso ainda colocar filtro no status, no qual não consigo de maneira alguma! Por exemplo, eu quero visualizar apenas os pedidos que estão em PRODUÇÃO... como eu faço isso ?
Você tem de fazer algo assim, deve ter de corrigir porem ao invez de fazer um subselect tem de fazer um inner
SELECT
p.Codigo,
p.Valor,
p.data,
p.Vendedor
a.Descricao
FROM
Pedidos p
INNER JOIN (
select
*
from
pedidostatus x where x.CodPedido = p.codigo order by codigo desc limit 1
) a
WHERE a.statusdopedido = [ô]XXXXXXXXXX[ô]
SELECT
p.Codigo,
p.Valor,
p.data,
p.Vendedor
a.Descricao
FROM
Pedidos p
INNER JOIN (
select
*
from
pedidostatus x where x.CodPedido = p.codigo order by codigo desc limit 1
) a
WHERE a.statusdopedido = [ô]XXXXXXXXXX[ô]
Citação::
Você tem de fazer algo assim, deve ter de corrigir porem ao invez de fazer um subselect tem de fazer um inner
SELECT
p.Codigo,
p.Valor,
p.data,
p.Vendedor
a.Descricao
FROM
Pedidos p
INNER JOIN (
select
*
from
pedidostatus x where x.CodPedido = p.codigo order by codigo desc limit 1
) a
WHERE a.statusdopedido = [ô]XXXXXXXXXX[ô]
deu o erro: Unknown column [ô]p.codigo[ô] in [ô]where clause[ô]
acho que ele num tá achando a tabela Pedidos fora do inner join... ?!
OCELOT, estou utilizando o mysql query browser para executar a consulta... não estou no vb ainda... o erro retornado é do MySQL!
Caro FERDEAD
para um controle mais especÃfico é interessante colocar um campo data no status para saber quando o mesmo sofreu alteração e dessa maneira você consegue fazer o retorno da consulta com mais eficiência.
depois de criado o campo DATA na tabela de status faça o seguinte SQL
SELECT p.Codigo, p.Valor, p.data, p.Vendedor,
(select descricao
from pedidostatus x
where x.CodPedido = p.codigo
[txt-color=#e80000]and x.data >= p.data[/txt-color]
order by codigo desc limit 1
) as Status
FROM Pedidos p
Espero ter ajudado
para um controle mais especÃfico é interessante colocar um campo data no status para saber quando o mesmo sofreu alteração e dessa maneira você consegue fazer o retorno da consulta com mais eficiência.
depois de criado o campo DATA na tabela de status faça o seguinte SQL
SELECT p.Codigo, p.Valor, p.data, p.Vendedor,
(select descricao
from pedidostatus x
where x.CodPedido = p.codigo
[txt-color=#e80000]and x.data >= p.data[/txt-color]
order by codigo desc limit 1
) as Status
FROM Pedidos p
Espero ter ajudado
FILMAN, eu até tenho o campo data nas duas tabelas, mas não é esse o problema exatamente...
eu queria filtrar os pedidos pelo status, por exemplo, quero pegar todos os pedidos que estão [Ô]em produção[Ô] ou [Ô]cancelado[Ô]..
eu queria filtrar os pedidos pelo status, por exemplo, quero pegar todos os pedidos que estão [Ô]em produção[Ô] ou [Ô]cancelado[Ô]..
Me desculpe pela minha outra resposta, não sei como postei aqui a resposta que deveria ser de outro tópico, isso é o que dá abrir várias abas cada uma em um tópico diferente...
Mas é o seguinte, se a sua primeira SQL funciona mas o que falta é poder filtrar pelo status o que acontece é que você não pode usar o campo status no WHERE, porém você pode colocar novamente a sub select nele
SELECT
p.Codigo, p.Valor, p.data, p.Vendedor, (select descricao from pedidostatus x where x.CodPedido = p.codigo order by codigo desc limit 1) as Status
FROM
Pedidos p
WHERE
(select descricao from pedidostatus x where x.CodPedido = p.codigo order by codigo desc limit 1) = [ô]ENTREGUE[ô]
Não testei no MySQL aqui porque não tenho ele, mas funciona no SQL Server desta forma, mudando apenas o limit 1 pelo TOP 1 do SQL Server
Mas é o seguinte, se a sua primeira SQL funciona mas o que falta é poder filtrar pelo status o que acontece é que você não pode usar o campo status no WHERE, porém você pode colocar novamente a sub select nele
SELECT
p.Codigo, p.Valor, p.data, p.Vendedor, (select descricao from pedidostatus x where x.CodPedido = p.codigo order by codigo desc limit 1) as Status
FROM
Pedidos p
WHERE
(select descricao from pedidostatus x where x.CodPedido = p.codigo order by codigo desc limit 1) = [ô]ENTREGUE[ô]
Não testei no MySQL aqui porque não tenho ele, mas funciona no SQL Server desta forma, mudando apenas o limit 1 pelo TOP 1 do SQL Server
você pode estar utilizando da mesma maneira
SELECT p.Codigo, p.Valor, p.data, p.Vendedor,
(select descricao
from pedidostatus x
where x.CodPedido = p.codigo
and x.data >= p.data
and x.descricao in ([ô]ENTREGUE[ô],[ô]FIALIZADO[ô])
) as Status
FROM Pedidos p
veja se te ajuda
SELECT p.Codigo, p.Valor, p.data, p.Vendedor,
(select descricao
from pedidostatus x
where x.CodPedido = p.codigo
and x.data >= p.data
and x.descricao in ([ô]ENTREGUE[ô],[ô]FIALIZADO[ô])
) as Status
FROM Pedidos p
veja se te ajuda
Da maneira do OCELOT deu certinho... vlw !!!
Tópico encerrado , respostas não são mais permitidas