Produtos Vendidos em todos os departamentos

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
ammsantos
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Seg, 13 Set 2010 10:56 am
Localização: Lisboa
O messias profetisado em Isaías (49:7, 50:4...) e Daniel (2:45, 9:24-27) é Jesus. Ele disse que viria outra vez.

Olá a todos!

Estou a praticar sql e no exercicio que estou a fazer não estou a conseguir resolver o seguinte:

As tabelas são:

Departamento(CodDepartamento, Nome, Piso, CodChefe)
Venda(Departmento, CodProducto, Data, Quantidade)
Produto(CodProduto, Descricao, Valor)

A questão em dúvida é a seguinte
Que produtos foram vendidos por todos os departamentos?

Já fiz vários testes, mas não está a funcionar.

Muito Obrigado!
RJG
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 79
Registrado em: Ter, 16 Mai 2006 11:40 am
Localização: Patos de Minas - MG

é isso que quer???

Selecionar tudo

select c.nome,a.descricao
from produto a,venda b,departamento c
where a.codproduto = b.codproduto and
         b.coddepartamento = c.coddepartamento;
Tem que colocar é codigo do departamento na Venda!!
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

posta seus testes ai..

você não pode colocar cada departamento no seu where?
ammsantos
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Seg, 13 Set 2010 10:56 am
Localização: Lisboa
O messias profetisado em Isaías (49:7, 50:4...) e Daniel (2:45, 9:24-27) é Jesus. Ele disse que viria outra vez.

Boa Tarde a todos!

Olá RJG obrigado pela resposta e possivelmente é isso que o exercicio pede.

Mas quando li a questão, percebi que poderia haver um produto ou vários vendidos em todos os departamentos e era isso que eu procurava.

O que me enviaste retornou os produtos vendidos e os departamentos respectivos.

@ Victor Hugo Muniz
A hipotese de saber os departamentos e fizer pesquisa dept a dept não dá dado que é um exercicio genérico em que apenas tenho a descrição dos campos das tabelas como enviei.

O que estava a pensar era ver quais eram os departamentos existentes e verificar se cada produto foi vendido em todos os departamentos, ou contar o número total de departamentos e verificar cada produto é vendido x vezes.

Se tiverem alguma ideia de como fazer isro, agradeço.

Muito Obrigado.
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP

tente algo assim:

Selecionar tudo

select *
from Produto
where cod_producto in (
  select t1.cod_producto 
  from (
    select cod_producto , departamento
    from venda
    group by cod_producto , departamento) t1
  group by t1.cod_producto
  having count(*) >= (select count(*) from departamento));
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

o que traz esse select ?

Selecionar tudo

select p.CodProduto
from   produtos p,
       venda v,
       departamento d
where  p.CodProduto= v.CodProduto
and    v.CodDepartamento(+) = d.CodDepartamento
você resolve isso por outer join
Outer Join

Another type of join is called an outer join. This type of join returns all rows from one table and only those rows from a secondary table where the joined fields are equal (join condition is met).

For example,

select suppliers.supplier_id, suppliers.supplier_name, orders.order_date
from suppliers, orders
where suppliers.supplier_id = orders.supplier_id(+);

This SQL statement would return all rows from the suppliers table and only those rows from the orders table where the joined fields are equal.

The (+) after the orders.supplier_id field indicates that, if a supplier_id value in the suppliers table does not exist in the orders table, all fields in the orders table will display as <null> in the result set.

The above SQL statement could also be written as follows:

select suppliers.supplier_id, suppliers.supplier_name, orders.order_date
from suppliers, orders
where orders.supplier_id(+) = suppliers.supplier_id


Let's look at some data to explain how outer joins work:

We have a table called suppliers with two fields (supplier_id and name).
It contains the following data:
supplier_id supplier_name
10000 IBM
10001 Hewlett Packard
10002 Microsoft
10003 NVIDIA

We have a second table called orders with three fields (order_id, supplier_id, and order_date).
It contains the following data:
order_id supplier_id order_date
500125 10000 2003/05/12
500126 10001 2003/05/13

If we run the SQL statement below:

select suppliers.supplier_id, suppliers.supplier_name, orders.order_date
from suppliers, orders
where suppliers.supplier_id = orders.supplier_id(+);


Our result set would look like this:
supplier_id supplier_name order_date
10000 IBM 2003/05/12
10001 Hewlett Packard 2003/05/13
10002 Microsoft <null>
10003 NVIDIA <null>

The rows for Microsoft and NVIDIA would be included because an outer join was used. However, you will notice that the order_date field for those records contains a <null> value.
ammsantos
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Seg, 13 Set 2010 10:56 am
Localização: Lisboa
O messias profetisado em Isaías (49:7, 50:4...) e Daniel (2:45, 9:24-27) é Jesus. Ele disse que viria outra vez.

Olá a todos!

Quero agradecer-vos pela vossa ajuda.

Burga, o que enviaste funcionou. E muito Obrigado Victo Hugo pois compreendi o outer join.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante