Select relacionando outras tabelas.

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
p3droh3nriqu3
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Sex, 19 Nov 2010 11:59 am
Localização: Fortaleza - Ceará

Boa tarde, gostaria de saber como fazer um select, relacionando outras tabelas.
ex:

Selecionar tudo

"TBPRODUTO";CODPROD,DESCRICAO,CODFORNECEDOR,CODDEPTO           
                                  
"TBFORNECEDOR"; CODFORNECEDOR,DESCRICAO
                     
"TBDEPARTAMENTO"; CODDEPTO,DESCRICAO 

Preciso fazer um select da "TBPRODUTO", em vez de exibir o "CODFORNECEDOR" e "CODDEPTO", queria exibir o nome do FORNECEDOR E O DEPARTAMENTO.

Se alguém puder ajudar agradeço muito. :D
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP
Ricardo H. Tajiri

Selecionar tudo

SELECT 
  PROD.CODPROD,
  PROD.DESCRICAO PRODUTO,
  FORN.DESCRICAO FORNECEDOR,
  DEPT.DESCRICAO DEPARTAMENTO
FROM TBPRODUTO PROD 
  LEFT OUTER JOIN TBFORNECEDOR FORN 
    ON PROD.CODFORNECEDOR = FORN.CODFORNECEDOR
  LEFT OUTER JOIN TBDEPARTAMENTO DEPT
    ON PROD.CODDEPTO = DEPT.CODDEPTO;
p3droh3nriqu3
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Sex, 19 Nov 2010 11:59 am
Localização: Fortaleza - Ceará

Deu certo não :cry: :cry:

Selecionar tudo

"PCPRODUT";CODPROD,DESCRICAO,CODFORNECEDOR,CODDEPTO

"PCFORNE"; CODFORNECEDOR,DESCRICAO

"PCDEPTO"; CODDEPTO,DESCRICAO

Será porque coloquei o nome das tabelas diferente????
tentei mudar mas num acertei :cry: :cry:
Essas ai em cima são os verdadeiro nome das tabelas.
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

Selecionar tudo

select PCPRODUT.CODPROD,
       PCPRODUT.DESCRICAO,
       PCFORNE.DESCRICAO,
       PCDEPTO.DESCRICAO
  from PCPRODUT, PCFORNE, PCDEPTO
 where PCPRODUT.CODFORNECEDOR = PCFORNE.CODFORNECEDOR
   and PCPRODUT.CODDEPTO = PCPRODUT.CODDEPTO
foi?
p3droh3nriqu3
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Sex, 19 Nov 2010 11:59 am
Localização: Fortaleza - Ceará

Deu certo não :cry: :cry: :cry:

diz que a tabela ou wiew não existe

obrigado memsmo assim.
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

qual o nome das tabelas?

PCPRODUT ou TBPRODUTO?
p3droh3nriqu3
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Sex, 19 Nov 2010 11:59 am
Localização: Fortaleza - Ceará

Ta ai tudo certinho

TABELA: PCPRODUT;
CAMPOS: CODPROD,DESCRICAO,CODFORNEC,CODDEPTO

TABELA: PCFORNEC;
CAMPOS: CODFORNEC,FORNECEDOR

TABELA: PCDEPTO;
:CAMPOS: CODEPTO,DESCRICAO


DESCULPEM A CONFUSÃO :oops:

Preciso fazer um select da "PCPRODUT", em vez de exibir o "CODFORNECEDOR" e "CODDEPTO", queria exibir o nome do 'FORNECEDOR' E A 'DESCRICAO' DO DEPARTAMENTO.

Se alguém puder ajudar agradeço muito.
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

esse select tem q funcionar

Selecionar tudo

select PCPRODUT.CODPROD, 
       PCPRODUT.DESCRICAO, 
       PCFORNE.DESCRICAO, 
       PCDEPTO.DESCRICAO 
  from PCPRODUT, PCFORNE, PCDEPTO 
 where PCPRODUT.CODFORNECEDOR = PCFORNE.CODFORNECEDOR 
   and PCPRODUT.CODDEPTO = PCPRODUT.CODDEPTO 
se deu que não existe a tabela e porque possivelmente você esta logado com um usuario que não "encherga" a tabela acessada.. basta colocar o owner.tabela

você tem que descobrir o usuario proprietario da tabela e trocar essa linha

Selecionar tudo

  
..
from PCPRODUT, PCFORNE, PCDEPTO 
..
por.. onde user você troca pelo usuario dono da tabela

Selecionar tudo

..
  from user.PCPRODUT, user.PCFORNE, user.PCDEPTO 
..
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

Realmente, como o victorhugomuniz falou, se com este select

Selecionar tudo

Select a.codprod,
       a.descricao produto,
       b.descricao fornecedor,
       c.descricao departamento
  From pcproduct a,
       pcfornec  b,
       pcdepto   c
 Where a.codfornecedor = b.codfornecedor
   And a.coddepto = c.coddepto
não retornar nada, ou as tabelas não existem ou o usuário logado não tem permissão de acesso a elas...
p3droh3nriqu3
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Sex, 19 Nov 2010 11:59 am
Localização: Fortaleza - Ceará

oHH gente, muito obrigado hein, so precisei fazer uns ajustinhos nos nomes e deu certo aqui o cod que vocês passaram, obrigado a todos pela atenção. :P :P :) :D
p3droh3nriqu3
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Sex, 19 Nov 2010 11:59 am
Localização: Fortaleza - Ceará

Galera probleminha qui oh, o CODIGO AI EM BAIXO DEU CERTO OK, so que ele ta repetindo os produtos em todos os departamentos, sendo que, um produto so pertence a um departamento, porque será que ta replicando??
to mandando a imagem em anexo blza? da um luz ai gente por favor :cry:

Selecionar tudo

select PCPRODUT.DESCRICAO,                       
         PCPRODUT.CODPROD,                         
         PCFORNEC.FORNECEDOR,                      
         PCDEPTO.DESCRICAO                         
 from PCPRODUT, PCFORNEC, PCDEPTO               
 where PCPRODUT.CODFORNEC = PCFORNEC.CODFORNEC   
   and PCPRODUT.CODEPTO = PCPRODUT.CODEPTO       
   ORDER BY CODPROD
Imagem
ermim
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Seg, 22 Nov 2010 12:06 pm
Localização: Pitangueiras-SP

E se você fizer com o código abaixo, dá errado?

Selecionar tudo

select distinct 
  f.descricao as 'Fornecedor', 
  d.descricao as 'Departamento'
  from tbfornecedor f,
       tbdepartamento d,
       tbproduto p
where f.codfornecedor = p.codfornecedor and
      d.coddepto = p.coddepto
order by f.codfornecedor asc;
p3droh3nriqu3
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Sex, 19 Nov 2010 11:59 am
Localização: Fortaleza - Ceará

Deu esse erro, obrigado pela ajuda.

Selecionar tudo

***    INICIADO :   22/11/2010 12:36:49 ***
Processando ...
ORA-00923: FROM keyword not found where expected

Nenhuma linha retornada
Tempo gasto: 00:00:00
***    FINALIZADO : 22/11/2010 12:36:49 ***
ermim
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Seg, 22 Nov 2010 12:06 pm
Localização: Pitangueiras-SP

uai....e assim?

Selecionar tudo

select f.descricao Fornecedor, d.descricao Departamento
 from TBPRODUTO P
INNER JOIN TBFORNECEDOR F ON P.CODFORNECEDOR = F.CODFORNECEDOR
INNER JOIN TBDEPARTAMENTO D ON P.CODDEPTO = D.CODDEPTO
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

o código abaixo deu pau por causa das aspas nos apelidos das colunas

Selecionar tudo

select distinct 
  f.descricao as 'Fornecedor', 
  d.descricao as 'Departamento' 
  from tbfornecedor f, 
       tbdepartamento d, 
       tbproduto p 
where f.codfornecedor = p.codfornecedor and 
      d.coddepto = p.coddepto 
order by f.codfornecedor asc;
apenas retire as apas de 'Fornecedor' e de 'Departamento' e tenta de novo.
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP
Ricardo H. Tajiri

Só complementando o post do Sergio, quando se usa aspas pra colocar apelidos em colunas, estas devem ser duplas e não simples...

As aspas duplas servem mais pra quando se quer colocar apelidos com espaços ou quando não se deseja que o Oracle faça um UPPER no nome dos apelidos, de resto, pode deixar sem...
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 21 visitantes