Ajuda com para criar uma Consulta SQL

14 respostas
douglasmorais

Ola amigos…

Preciso fazer uma consulta que retorne o preco de um produto em diversos fornecedores e gostaria da ajuda de voces… Por exemplo, dado um produto, listar o fornecedor e o valor… To aprendendo agora SQL… Peguei o livro Use a Cabeca SQL mas no ta saindo nada

as tabelas sao as seguinte:

CREATE TABLE tabela_custo (       
   idProduto integer not null,       
   idFornecedor integer not null,  
   valorProduto decimal(10,2), 
    primary key (idProduto, idFornecedor),    
    constraint chave_estrangeira1 foreign key (idProduto) references produto( idProduto),       
    constraint chave_estrangeira2 foreign key (idFornecedor) references fornecedor (idFornecedor)       
) TYPE=INNODB;

Tabela Produto:

CREATE TABLE produto (
idProduto integer not null,
nomeProduto varchar(50),
) TYPE=INNODB;

A Tabela Fornecedor:

CREATE TABLE fornecedor (
idFornecedor integer not null,
nomeForcecedor varchar(50),
) TYPE=INNODB;

14 Respostas

douglasmorais

Estava tentando isso:

select nomeProduto, valor from tabela_custo inner join  fornecedor on fornecedor.idFornecedor = tabela_custo.idFornecedor

mas ta dando erro:

Código do erro 1054, estado do SQL 42S22: Unknown column 'nomeProduto' in 'field list'
Linha 1, coluna 1
douglasmorais

Me falaram que eu terei que usar uma sub consulta… Alguem sabe como faz ?

BrunoFurtado

As tabelas Produto e Fornecedor estão sem chaves primárias, acredito que vc retirou as contraints PK pois ambos tem a virgula após o último campo.
Incluindo as PKs na tabela, cria-se as FKs na TABELA_CUSTO e é víavel realizar os joins.

A tabela Produto esta com o campo “nomeForcecedor” e não “nomeFornecedor”.

  • Teu tópico tá no Java Básico e n tem nada a ver…

Segue query:

SELECT
  p.nomeProduto,
  f.nomeForcecedor,
  tc.valorProduto
FROM
  produto p,
  fornecedor f,
  tabela_custo tc
WHERE
  tc.idProduto = p.idProduto 
  AND tc.idFornecedor = f.idFornecedor
  AND p.nomeProduto = 'sabao'
;
douglasmorais

O Brunao… mais uma vez, obrigado cara…

mas as tabelas estao com as PKs sim… eu esqueci de por…

eu sei cara, desculpa por por em java basico… Por ser questoes que acredito serem basicas ( pra quem ja tem experiencia ) eu postei aqui…

douglasmorais

por por foi fogo… eita portugues… rs

douglasmorais

Mas ainda nao funcionou…

BrunoFurtado

Opa,

Cara, fiz teste aqui e deu certo…
Qual o erro ou resultado que apareceu ae?

douglasmorais
Código do erro 1054, estado do SQL 42S22: Unknown column 'f.nomeForcecedor' in 'field list'
BrunoFurtado

troque nomeForcecedor por nomeFornecedor

douglasmorais

Que vacilo meu… kkkk

o problema era o Forcecedor mesmo… deu certo agora…

eu nao sabia que podia colocar mais de uma tabela como argumento para o From… Tava pensando que teria que usar uma especie de subconsulta…

Mas valeu mesmo… muito obrigado…

douglasmorais

Bruno, sem querer abusar cara… soh para exemplo… se eu quisesse pegar o Sum de um campo numerico, como eu faria ? pelo resultset tambem ?

BrunoFurtado

Opa,
Não sei mto bem qual teu objetivo, mas segue duas opções.

-- somando valores de apenas um produto
SELECT
  p.nomeProduto,
  f.nomeForcecedor,
  SUM(tc.valorProduto)
FROM
  produto p,
  fornecedor f,
  tabela_custo tc
WHERE
  tc.idProduto = p.idProduto 
  AND tc.idFornecedor = f.idFornecedor
  AND p.nomeProduto = 'sabao'
;

-- somando os valores de todos os produtos individualmente para comparativo
SELECT
  p.nomeProduto,
  SUM(tc.valorProduto)
FROM
  produto p,
  fornecedor f,
  tabela_custo tc
WHERE
  tc.idProduto = p.idProduto 
  AND tc.idFornecedor = f.idFornecedor
GROUP BY
  p.nomeProduto
;

E por ai vai…

BrunoFurtado

Isso…
Pega pelo ResultSet sim…
Vc pode criar um alias para o campo e chama-lo la no Java, assim como “CODIGO_VENDA”.
Ou pode pegar os resultados atraves do numero da coluna…

resultSet.getString(1);
resultSet.getFloat(2);

resultSet.getInt("NOME_ALIAS");

Para criar um alias basta adicionar um nome no SELECT:

SELECT
     SUM(num) SOMA_NUM
FROM
     tabela
douglasmorais

Valeu cara… sucesso, saude e boa sorte

Criado 16 de janeiro de 2012
Ultima resposta 16 de jan. de 2012
Respostas 14
Participantes 2