INNER JOIN

ARES 18/10/2011 15:24:40
#386964
Amigos,

ka estou eu com mais uma dúvida;

Tenho em banco MYSQL duas tabelas (vendas e meta)

via FTP os vendedores atualização os dados das vendas realizadas.
via FTP os vendedores atualização os dados das metas mensais.

coloquei em um listview os dados de positivação de produtos e clientes fazendo uma união entre o que foi vendido e o que falta para vender;

conforme imagem (abaixo)

Entretanto, na união que fiz se o vendedor não realizou ainda nenhuma venda de um determinado produto não está aparecendo a meta.
Para alcançar o objetivo do trabalho preciso que quando não tiver vendas realizadas do produto apareça a meta com saldo (-).

Alguem tem uma sugestão para código ou de outro código.

Public Sub Qry_abre()
Dim newlist As ListItem
listameta.ListItems.Clear

mycon.Open [Ô]dsn=asgard_salles[Ô]


With mycmd
.ActiveConnection = mycon
.CommandType = adCmdText

If frminicial.txtemp = [Ô]170[Ô] Then

.CommandText = [Ô]SELECT distinct(vendas.codigo_produto), vendas.descricao, count(distinct(vendas.cliente))as cliente1, meta.cliente, meta.grupo FROM meta inner join vendas on meta.produto = vendas.codigo_produto group by vendas.codigo_produto, vendas.descricao[Ô]

Set myrs = .Execute

ElseIf frminicial.txtemp = [Ô]190[Ô] Then

.CommandText = [Ô]SELECT distinct(vendas190.codigo_produto), vendas190.descricao, count(distinct(vendas190.cliente))as cliente1, meta.cliente, meta.grupo FROM meta inner join vendas190 on meta.produto = vendas190.codigo_produto group by vendas190.codigo_produto, vendas190.descricao[Ô]
Set myrs = .Execute

End If

End With
Do Until myrs.EOF
Set newlist = listameta.ListItems.Add(, [Ô] Key [Ô] & myrs([Ô]codigo_produto[Ô]), myrs([Ô]codigo_produto[Ô]))
newlist.SubItems(1) = [Ô][Ô] & myrs([Ô]grupo[Ô])
newlist.SubItems(2) = [Ô][Ô] & myrs([Ô]descricao[Ô])
newlist.SubItems(3) = [Ô][Ô] & myrs([Ô]cliente[Ô])
newlist.SubItems(4) = [Ô][Ô] & myrs([Ô]cliente1[Ô])
saldo = myrs!cliente1 - myrs!cliente
newlist.SubItems(5) = saldo
newlist.SubItems(6) = [Ô][Ô] & myrs([Ô]codigo_produto[Ô])


myrs.MoveNext
Loop
myrs.Close
Set myrs = Nothing
mycon.Close

End Sub

Desde já agradeço.
LROSSI 18/10/2011 16:23:58
#386973
Resposta escolhida
substitua os [Ô]inner join[Ô] por [Ô]left join[Ô] que vai aparecer o resultado do que tem na tabela meta tendo ou não registros relacionados nas tabelas vendas* .
espero ter ajudado.
LONNEWOLF 18/10/2011 16:53:09
#386974
somente esclarecendo o left ou right join, isto significa que se uma tabela do inner nao tiver relação alguma com a outra, a tabela da left (esquerda) ou right (direita) é quem vai aparecer, por exemplo, vc faz um tabela 1 left join tabela2, os resultados da tabela1 é que vai aparecer... quando vc usa o inner, vc esta forçando a aparecer somente os dados que existem relação entre eles...
LROSSI 18/10/2011 17:05:39
#386977
o [Ô]inner join[Ô] obriga ter relacionamento entre as tabelas, já o left e right join incluem os valores dos campos que tem relacionamento e deixam em branco os que não tem... isso dito a grosso modo
ARES 18/10/2011 17:29:28
#386978
Amigos,

Muito obrigado pelas resposta, vcs sao feras.

att
Ricardo Nantes
Tópico encerrado , respostas não são mais permitidas