Ir para conteúdo
Fórum Script Brasil
  • 0

inner join


Carlos Rocha

Pergunta

Ola pessoal.

estou tentando fazer uma consulta inner join que deveria retornar 4 registros e não esta retornando nenhum e tambem não esta dando erro:

Onde será que estou errando?

select Count(*) from detalhespedidos d 
inner join pedidos p on p.pedidoID = p.pedidoID 
inner join  clientes c on c.clienteID= p.clienteID 
where p.ativo= 'S' and  c.nome like 'c%' 
order by p.pedidoID

É uma tabela de detalhes(itens)pedidos preciso saber quantos são os ítens cadastrados na tabela de ítens(detalhes) que satisfaçam a condição de que o pedidoID na tabela de pedidos seja igual ao pedidoID na tabela de ítens e o ClienteID na tabela de pedidos seja igual ao clienteID na tabela de clientes(essa parte é para eu pegar o nome do cliente para fazrer o like pois na tabela de ítenms nçao tem nem o id nem o nome do cliente

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Oi, 'Carlos Rocha'

Um de seus erros está nesta linha: inner join pedidos p on p.pedidoID = p.pedidoID . Você está comparando o pedido com ele mesmo. Não vai dar erro, mas, também, não vai retornar nada.

Corrija a linha para inner join pedidos p on p.pedidoID = d.pedidoID.

O segundo erro está aqui: select Count(*) from detalhespedidos d . Quando você disse:

...preciso saber quantos são os ítens cadastrados na tabela de ítens(detalhes) que satisfaçam a condição de que o pedidoID na tabela de pedidos seja igual ao pedidoID na tabela de ítens...

Corrija a linha para select p.pedidoID, Count(*) from detalhespedidos d

Substitua a linha order by p.pedidoID por GROUP BY p.pedidoID

Mais uma coisa. como você vai fazer um filtro por nome de cliente na tabela cliente, sugiro que você crie um índice por nome para que não fique lenta a sua pesquisa.

ALTER TABLE CLIENTTE
ADD INDEX  (nome);

E, coo você está usando inner join, não esqueça de verificar se há indices pelos seguintes atributos nas respectivas tabelas:

pedidoID ->> pedidos

pedidoID ->> detalhespedidos

clienteID ->> cliente

Link para o comentário
Compartilhar em outros sites

  • 0

Doce ilusão é a minha:

fiz assim:

select Count(*) from detalhespedidos d 
inner join pedidos p,  clientes c  on p.pedidoID = p.pedidoID and c.codigo = p.clienteID 
where p.ativo= 'S' and  c.nome like 'c%'

Retornou 12 e era para retornar só 4

O que a contece é :

na tabela de detalhespedidos não tem clienteID

na tabela de pedidos tem clienteID

eu preciso saber quantos ítens tem na tabela de detalhespedidos que foram comprados pelo pedido tal onde o nome do comprador começa com c

Ta dificil essa

Link para o comentário
Compartilhar em outros sites

  • 0

oK.

Tentemos outra então:

Preciso de fazer essa consulta

Select COUNT(*) from detalhespedidos where pedidoID= 04 OR pedidoID= 02 OR pedidoID= 03 OR pedidoID= 01
esses numeros 04,02,03,01, são numeros que serão tirados de uma outra consulta sql que me informará quais pedidos satisfazem uma determinada condição. Dai, essa consulta retornará os numeros dos pedidos dentro de um while. Ai morre minha dúvida: Como montar o select acima se eu preciso de todos os numeros de pedidos de uma só vez? veja o while
While (leitor.Read())
                pedidoID = leitor("pedidoID")
                clienteID = leitor("clienteID")
                nomecli = leitor("nome")

                Tabela.Cell(ContaLinha, 1).Range.Text = pedidoID
                Tabela.Cell(ContaLinha, 2).Range.Text = clienteID
                Tabela.Cell(ContaLinha, 3).Range.Text = splitstring(nomecli)
                Dim PrintStringdetalhespedidos2 As String = "Select * from detalhespedidos where pedidoID= " & leitor("pedidoID")
                Dim PrintStringdetalhespedidoscounttotal As String = "Select COUNT(*) from detalhespedidos where pedidoID= " & leitor("pedidoID")
                Dim item As DataSet = accDb.ExecuteDS(PrintStringdetalhespedidos2, "detalhespedidos")
                For Each linhaDS As DataRow In item.Tables(0).Rows
                    produtoID = linhaDS("produtoID")
                    descricao = linhaDS("descricao")
                    quantidade = linhaDS("quantidade")
                    unidade = linhaDS("unidade")
                    preço = linhaDS("preço")
                    peso = linhaDS("peso")
                    subtotal = linhaDS("subtotal")
                    'condicao = linha("condicao")
                    Tabela.Cell(ContaLinha, 4).Range.Text() = produtoID
                    Tabela.Cell(ContaLinha, 5).Range.Text = splitstring(descricao)
                    Tabela.Cell(ContaLinha, 6).Range.Text = quantidade
                    Tabela.Cell(ContaLinha, 7).Range.Text = unidade
                    Tabela.Cell(ContaLinha, 8).Range.Text = preço
                    Tabela.Cell(ContaLinha, 9).Range.Text = peso
                    Tabela.Cell(ContaLinha, 10).Range.Text = subtotal
                    pesoaproximado += peso
                    TotalNota += subtotal
                    ContaLinha += 1
                Next linhaDS

detalhe, preciso do retorna dessa consulta fora do while para eu saber quantas linhas terei em uma tabela que montareino word

Link para o comentário
Compartilhar em outros sites

  • 0

Eu fiz algo parecido com o que voce fez (a solucao, porque o codigo que você colocou não li), minha solucao foi:

1º Select traz os IDs

preparar uma string com o seguinte formado:

$String = "1, 2, 5, 9" <= os numero são os IDs, no php é facil fazer isso, usei um implode

Finalmente:

SELECT algo

from detalhespedidos

WHERE pedidoID IN ($String)

não sei se era isso.. mas boa sorte ae

Link para o comentário
Compartilhar em outros sites

  • 0

Rsrsrs.

Tambem sou programador php.

Fala sério né?

Como o php ajuda o programador a programar!

Na verdade, eu antes de voce responder, eu tinha chegado a essa conmclusão tamebem e deu certo, só que eu deixei o post aberto pra ver se oraciociniuo estava correto!

Valeu!

Moderador. Pode fechar o tópico por favor?

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...