Ir ao conteúdo

SQL com problema!


Pulllga

Posts recomendados

Postado

Olá, sou o Pulllga,

Fiz uma consulta SQL em VB:


select p.nom from Pessoas p where p.Cod = (select t.pes from Tecnicos t where t.rep = (select r.Cod from Representantes r where r.pes = (select cod from Pessoas where nom = '" & cmbRep.Text & "')))

O problema é que ele acusa que a subconsulta pode retornar mais de um valor, a principio isso é normal e funciona, porque comigo não funciona???

O problema é aqui:


p.Cod = (select

Se a consulta retorna um valor funciona direito, mas com mais de um da erro!!!

Se eu usar o "in", ele não funciona de jeito nenhum!!!

O que pode ser???

falou, T+ :D:D:D

  • Membro VIP
Postado

O "=" só pode ser usado com valores escalares, para o seu caso existe o "IN" (ta, eu sei que você falou que não funcioa, mas não disse qual o erro...), o "= ALL" e o "= ANY", ou pode usar um "TOP 1" na subconsulta.

Postado

Olá,

Se eu usar o "IN" ele pede para usar "JOIN".

Se eu usar o "ALL", também pede "JOIN".

Se eu usar o "ANY", "JOIN" também!

Mas como eu uso o "JOIN" nesse caso?

O "JOIN" não é para mesclar campos iguais de duas tabelas diferentes?!

falou :D:D:D

  • Membro VIP
Postado
<div class='quotetop'>QUOTE

select p.nom from Pessoas p where p.Cod = (select t.pes from Tecnicos t where t.rep = (select r.Cod from Representantes r where r.pes = (select cod from Pessoas where nom = '" & cmbRep.Text & "')))

Postado

As tabelas estão abreviadas:

Pessoas p = Cadastra os campos em comuns para Representantes, Técnicos e Clientes.

Cod - Inteiro

nom - Texto

Representantes r = Cadastra os campos que não são comuns em Pessoas.

Cod - Inteiro

pes - inteiro -> Refere-se a Pessoas

Técnicos t = Cadastra os campo que não são comuns em Pessoas.

Cod - Inteiro

rep - Inteiro -> Refere-se a Representantes

pes - inteiro -> Refere-se a Pessoas

Os Técnicos quando cadastrados são ligados aos representantes pelo código do representante

Técnicos.rep = Representantes.Cod

Assim como os Representantes estão ligados a Pessoas pelo Código:

Representantes.pes = Pessoas.Cod

Eu preciso fazer um consulta que retorne todos os técnicos ligados a um representante, em um combo box eu seleciono um representante e outro combo box é preenchido com os nomes dos técnicos daquele representante.

Os nomes dos Técnicos e Representantes ficam gravados na tabela Pessoas.

T+ :D:D:D

  • Membro VIP
Postado

Transact-SQL não deveria dar esse erro...

De qualquer jeito, usando o "IN" um comando valido fica:


"select nom from Pessoas where Cod IN (select pes from Tecnicos  where rep IN (select Cod from Representantes where pes IN (select cod from Pessoas where nom = '" & cmbRep.Text & "')))"

E usando o tal do JOIN:


"
select p.nom
  from Pessoas p
  join Tecnicos t
    on p.Cod = t.pes
  join Representantes r
    on t.Rep = r.Cod
  join Pessoas p2
    on r.pes = p2.cod
where p2.nom = '" & cmbRep.Text & "')))"

Postado

Olá,

O primeiro funcionou e descobri uma coisa, o meu select também!!!

O problema é que tinha um campo que esqueci de definir o tipo de dado, ai eu estava comparando texto com número!!!

Só isso!!!

Ah, mas o select do join deu erro na clausula from, não entendi porque.

falou :D:D:D

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!