none
Erro no retorno da query RRS feed

  • Pergunta

  •  Boa noite, colegas.

    Estou com essa situação abaixo: 

    select cliente.*, parcela.data_vencimento from tbl_cliente as cliente
     inner join tbl_acordo as acordo
     on cliente.id_cliente = acordo.id_cliente
     inner join tbl_parcela_acordo as parcela
     on parcela.id_acordo = acordo.id_acordo 
     where (DAY(data_nascimento) = DAY(GETDATE()) AND MONTH(data_nascimento) = MONTH(GETDATE()) AND YEAR(data_vencimento) = YEAR(GETDATE()) AND (id_status = 12))
     or
     (DAY(data_vencimento) = DAY(GETDATE()+1) AND MONTH(data_vencimento) = MONTH(GETDATE()+1) AND YEAR(data_vencimento) = YEAR(GETDATE()+1) AND (id_status = 12))
                                                                                                       

    Porém quando executo recebo a mensagens Retorna erro Msg 209, Level 116, State 1, Line 8 -  Ambiguous colunm name "id_status."

    Abs,

    segunda-feira, 19 de setembro de 2016 23:10

Respostas

Todas as Respostas

  • Boa noite,

    Pela mensagem de erro, você deve ter uma coluna chamada id_status em mais de uma tabela envolvida na query, então será necessário colocar o Alias da tabela antes do nome da coluna para indicar qual coluna de qual tabela deve ser utilizada.

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 19 de setembro de 2016 23:16
  • Mas eu tenho  a coluna id status em ambas tabelas 
    segunda-feira, 19 de setembro de 2016 23:26
  • Procure declara todos os campos de suas tabelas, assim você não declara nada repetido, exemplo

    select idcliente = cliente.id, nome cliente = cliente.nome, cliente.endereco, nome_produto = produto.nome, idproduto = produto.id from ......

    Assim não vai mais apresentar este tipo de erro 

    Se a resposta contribuiu com seu aprendizado por favor marque como Útil
    Se solucionou seu problema por favor marque como Resposta
    Atenção, se seu problema foi resolvido não deixe o post aberto 

    Visite : www.codigoexpresso.com.br

    • Sugerido como Resposta Código Expresso sexta-feira, 23 de setembro de 2016 00:58
    segunda-feira, 19 de setembro de 2016 23:35
  • Mas não vai interferir nos joins ?
    terça-feira, 20 de setembro de 2016 00:13
  • Não uma coisa é o apelido que cria para seu campo ser exibido na query exemplo

    idcliente = cliente.id, idproduto = produto.id,

    no retorno de sua query vai receber (idcliente, idproduto) mas ao declarar em seus joins vai usar (cliente.id, produto.id) entendeu ? o que não pode é deixar dois campos com o nome de id em sua query.

    Veja aqui exemplos de Stored Procedures em MS SQL

    Se a resposta contribuiu com seu aprendizado por favor marque como Útil
    Se solucionou seu problema por favor marque como Resposta
    Atenção, se seu problema foi resolvido não deixe o post aberto 

    Visite : www.codigoexpresso.com.br


    terça-feira, 20 de setembro de 2016 00:19
  • Deleted
    terça-feira, 20 de setembro de 2016 12:59
  • Sim, os períodos  são todos zerados.

    Porem se eu não posso colocar dois campos com o nome id na minha query, como posso colocar para receber esse retorno da tabela id_status?


    terça-feira, 20 de setembro de 2016 13:18
  • Ola Fernando_Martins

    Você tem que especificar em qual tabela esta condição  "id_status = 12" é atendida. Isto porque a coluna "Id_Status" está contida em mais de uma tabela. Considerei na query abaixo, a existência da coluna "Id_Status" na tabela "tbl_cliente". Se não existir esta coluna nesta tabela, basta alterar o alias da coluna que alterei na query para sua respectiva tabela.  

    Execute a query abaixo e veja que o erro não irá mais ocorrer.

    select cliente.*, parcela.data_vencimento from tbl_cliente as cliente
      inner join tbl_acordo as acordo
      on cliente.id_cliente = acordo.id_cliente
      inner join tbl_parcela_acordo as parcela
      on parcela.id_acordo = acordo.id_acordo 
      where (DAY(data_nascimento) = DAY(GETDATE()) AND MONTH(data_nascimento) = MONTH(GETDATE()) AND YEAR(data_vencimento) = YEAR(GETDATE()) AND (cliente.id_status = 12))
      or
      (DAY(data_vencimento) = DAY(GETDATE()+1) AND MONTH(data_vencimento) = MONTH(GETDATE()+1) AND YEAR(data_vencimento) = YEAR(GETDATE()+1) AND (cliente.id_status = 12))
    Abraços


    Ricardo Lacerda


    terça-feira, 20 de setembro de 2016 13:51
  • Ricardo ao executar esse query eu recebo o seguinte erro: 

    Msg 209, Level 16, State 1, Line 6
    Ambiguous column name 'id_status'.

    E realmente o id_status está em mais de uma tabela, porém a  informação é para vir da tabela (tbl_despesa_parceiro). 

    Abs.

    terça-feira, 20 de setembro de 2016 14:02
  • OK! Mas esta tabela (tbl_despesa_parceiro) não pertence à sua query. Execute o procedimento abaixo

    select cliente.*, parcela.data_vencimento from tbl_cliente as cliente
      inner join tbl_acordo as acordo
      on cliente.id_cliente = acordo.id_cliente
      inner join tbl_parcela_acordo as parcela
      on parcela.id_acordo = acordo.id_acordo 
      where (DAY(data_nascimento) = DAY(GETDATE()) AND MONTH(data_nascimento) = MONTH(GETDATE()) AND YEAR(data_vencimento) = YEAR(GETDATE()) AND (parcela.id_status = 12))
      or
      (DAY(data_vencimento) = DAY(GETDATE()+1) AND MONTH(data_vencimento) = MONTH(GETDATE()+1) AND YEAR(data_vencimento) = YEAR(GETDATE()+1) AND (parcela.id_status = 12))


    Ricardo Lacerda


    terça-feira, 20 de setembro de 2016 14:07
  • Porem quando executo recebo que o nome da coluna id_status é invalida. 

    No caso eu preciso declarar ela? 

    Abs.

    terça-feira, 20 de setembro de 2016 14:21
  • Não Fernando.

    Em quais tabelas abaixo o campo Id_Status existe? tbl_acordo , tbl_cliente , tbl_parcela_acordo

    Fala para mim por favor!!!


    Ricardo Lacerda

    terça-feira, 20 de setembro de 2016 14:27
  • Existe na tbl_cliente, tbl_acordo, tbl_despesa_parceiro.
    terça-feira, 20 de setembro de 2016 14:33
  • Então Fernando, esta query deveria funcionar.

    select cliente.*, parcela.data_vencimento from tbl_cliente as cliente
      inner join tbl_acordo as acordo
      on cliente.id_cliente = acordo.id_cliente
      inner join tbl_parcela_acordo as parcela
      on parcela.id_acordo = acordo.id_acordo 
      where (DAY(data_nascimento) = DAY(GETDATE()) AND MONTH(data_nascimento) = MONTH(GETDATE()) AND YEAR(data_vencimento) = YEAR(GETDATE()) AND (cliente.id_status = 12))
      or
      (DAY(data_vencimento) = DAY(GETDATE()+1) AND MONTH(data_vencimento) = MONTH(GETDATE()+1) AND YEAR(data_vencimento) = YEAR(GETDATE()+1) AND (cliente.id_status = 12))
    Execute esta query e me diga o que resultou.


    Ricardo Lacerda

    terça-feira, 20 de setembro de 2016 14:54
  • Retorna as strings em branco.

    terça-feira, 20 de setembro de 2016 15:33
  • Fernando

    Vai ser difícil te ajudar desta maneira! Se você não descrever o seu problema da forma correta.

    STRING???

    Se não está resultando corretamente os dados você terá que rever as suas restrições na query.

    Então a query não está retornando o erro mais correto?

     


    Ricardo Lacerda



    terça-feira, 20 de setembro de 2016 15:36
  • Quando executo a query ele retorna todos os campos sem nenhuma informação. 

    So com os nomes da tabelas.

    
    • Editado Fernando_Martins terça-feira, 20 de setembro de 2016 15:44 Novas informações
    terça-feira, 20 de setembro de 2016 15:39
  • terça-feira, 20 de setembro de 2016 16:31
  • Deleted
    terça-feira, 20 de setembro de 2016 16:58
  • Como já falei para apresentar a query você da um apelido diferente para cada uma delas,

    idstatus_produto = produtos.idstatus, idstatus_cliente = clientes.idstatus,

    assim resolver o problema da query, e para fazer referencia a uma delas por exemplo na clausula where utilize o apelido da tabela ou o próprio nome da tabela

    Com o nome da tabela ( where produtos.idstatus = 12 )

    com o apelido ( from produtos as pro where pro.idstatus = 12)

     

    Veja aqui exemplos de Stored Procedures em MS SQL

    Se a resposta contribuiu com seu aprendizado por favor marque como Útil
    Se solucionou seu problema por favor marque como Resposta
    Atenção, se seu problema foi resolvido não deixe o post aberto 

    Visite : www.codigoexpresso.com.br

    • Sugerido como Resposta Código Expresso sexta-feira, 23 de setembro de 2016 00:58
    terça-feira, 20 de setembro de 2016 17:15
  • Eu tenho id_status na tbl_status, tbl_despesa_parceiro, tbl_acordo, tbl_cliente.

    Sobre a pergunta 2 a tabela id_status está em todas as tabelas que mencionei acima, porem preciso da informação que venha da tabela tbl_despesa_parceiro. 

    terça-feira, 20 de setembro de 2016 17:16
  • Deleted
    terça-feira, 20 de setembro de 2016 17:35
  • O código em si está certo José, mas quando executo tenho o erro Msg 207, Level 16, State 1, Line 24
    Invalid column name 'id_status'.

    Mas se eu tiro AND (parcela.id_status = 12) e deixo dessa maneira AND (cliente.id_status = 12) não aparece o erro mencionado acima, porém as tabelas aparecem em branco conforme print que adicionei. 


    terça-feira, 20 de setembro de 2016 17:47
  • Deleted
    terça-feira, 20 de setembro de 2016 17:58
  • Jose eu sou iniciante nesse contexto sintaxe. Eu tentei colocar no from a tbl_despesa_parceiro, mas não deu certo  não sei se foi a forma que eu fiz, você poderia me ajudar por gentileza?
    terça-feira, 20 de setembro de 2016 18:01
  • Deleted
    terça-feira, 20 de setembro de 2016 18:11
  •  1 -  tbl_acordo

     2 -  Usar coluna id_status

     3 - Usar da coluna tbl_acordo, coluna id_despesa_parceiro

    Abs

    terça-feira, 20 de setembro de 2016 18:19
  • Deleted
    terça-feira, 20 de setembro de 2016 18:32
  • Para saber se os vencimentos que são retornados estão ativos com o codigo 12

    terça-feira, 20 de setembro de 2016 18:46
  • Então você precisa de um JOIN na tabela que esta faltando para poder fazer referencia a ela

    Se a resposta contribuiu com seu aprendizado por favor marque como Útil
    Se solucionou seu problema por favor marque como Resposta
    Atenção, se seu problema foi resolvido não deixe o post aberto 

    Visite : www.codigoexpresso.com.br

    terça-feira, 20 de setembro de 2016 18:48
  • Podem me dizer como ficaria esse  join?

    E é preciso adicionar no select tbl_parceiro_despesa?

    Abs.

    terça-feira, 20 de setembro de 2016 22:56
  • Da mesma maneira que fez os outros, não conheço a estrutura de seu banco de dados para ajudar a construir a query.

    Se a resposta contribuiu com seu aprendizado por favor marque como Útil
    Se solucionou seu problema por favor marque como Resposta
    Atenção, se seu problema foi resolvido não deixe o post aberto 

    Visite : www.codigoexpresso.com.br

    • Sugerido como Resposta Código Expresso sexta-feira, 23 de setembro de 2016 00:59
    quarta-feira, 21 de setembro de 2016 18:07
  • Bom dia Fernando_Martins,

    Alguma das respostas nesta thread solucionou seu problema?
    Nós gostaríamos de fechar essa thread se possível, mas desejamos saber se você teve sua dúvida resolvida.
    Por gentileza, marque a respostar que te ajudou clicando em "Marcar como Resposta".

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 22 de setembro de 2016 12:40
  • Bom dia. problema resolvido....
    quinta-feira, 22 de setembro de 2016 13:14