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

Consulta


Flavio Nascto

Pergunta

Pessoal

Estou querendo fazer uma consulta que me traga todos os registros da tabela cliente e todos os pedidos feitos.

O problema é que eu quero que apareça todos os clientes independente de ter ou não pedido

Tabela: cliente (cod_cli, nome_cliente)

Tabela:Pedido (cod_pedido, cod_cliente, Dt_Pedido)

Select nome_cliente, dt_pedito

from cliente, pedido

where codcli = cod_cliente

Só sei fazer assim.. mas aqui não mostra todos os clientes, só aparecem o que tem pedido, claro por causa da iguadade.

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

você pode utilizar a sintaxe *= ou =* - especificação Ansi 92. Mas a partir do SQL2005, estas implementações estão descontinuadas.

O melhor mesmo é utilizar a sintaxe "left outer join" ou "right outer join" (que é a mesma coisa do *= ou =*).

Como ficaria o select:

select nome_cliente, dt_pedito from cliente left join pedido on codcli = cod_cliente

Testa no seu select também a sintaxe *= ou =*.... ;.)

Link para o comentário
Compartilhar em outros sites

  • 0
Pessoal

Estou querendo fazer uma consulta que me traga todos os registros da tabela cliente e todos os pedidos feitos.

O problema é que eu quero que apareça todos os clientes independente de ter ou não pedido

Tabela: cliente (cod_cli, nome_cliente)

Tabela:Pedido (cod_pedido, cod_cliente, Dt_Pedido)

Select nome_cliente, dt_pedito

from cliente, pedido

where codcli = cod_cliente

Só sei fazer assim.. mas aqui não mostra todos os clientes, só aparecem o que tem pedido, claro por causa da iguadade.

Estava com o mesmo problema, tentei usar o modo colocado pelo outro colega, mas ainda dava erro. Depois de muito pesquisar achei a forma correta de colocar a query para obter a resposta desejada:

Select nome_cliente, dt_pedito

from cliente left outer join pedido

on codcli = cod_cliente

order by nome_cliente

beleza :)

Obs: uso o SQL Server 2005. Quando se tenta usar *= ou =* a mensagem de erro é essa:

A consulta usa operadores de associações externas não-ANSI ("*=" ou "=*"). Para executar esta consulta sem modificações, defina o nível de compatibilidade do banco de dados como 80 ou menos usando o procedimento armazenado sp_dbcmptlevel. É bastante recomendável regravar a consulta usando operadores de associações externas ANSI (LEFT OUTER JOIN, RIGHT OUTER JOIN). Nas versões futuras do SQL Server, os operadores de associação não-ANSI não terão suporte nem mesmo para manter compatibilidade com versões anteriores.

Editado por Sims Brazilienses
Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Sims,

O select que postou:

Select nome_cliente, dt_pedito

from cliente left outer join pedido

on codcli = cod_cliente

order by nome_cliente

É exatamente igual ao exemplo que postei:

select nome_cliente, dt_pedito from cliente left join pedido on codcli = cod_cliente

Perceba que não possui a sintaxe OUTER, pois a mesma pode ser suprimida.

Expliquei que a sintaxe *= ou =* será descontinuada: "você pode utilizar a sintaxe *= ou =* - especificação Ansi 92. Mas a partir do SQL2005, estas implementações estão descontinuadas."

você pode sim alterar o nível de compatibilidade do SQL, mas sua performance diminuíra, pois o SQL realiza internamente a conversão da sintaxe.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

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