1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Duvida Sqlite

Discussão em 'Programação' iniciada por Xikinho90, 22 de Junho de 2008. (Respostas: 5; Visualizações: 611)

  1. Xikinho90

    Xikinho90 Power Member

    Boas, estou com uma divida tenho um exercício que pede isto

    -Quais os nomes dos projectos totalmente fornecidos pelo fornecedor 11001?



    Eu fiz este código



    Select distinct p.nr, p.nomep, f.nc
    from proj p, forn f, fcp
    where (fcp.proj = p.nr) and (fcp.forn = f.nc)
    order by p.nr, f.nc



    obtive uma tabela com 17 registo, não vou copialos todos, não deve ser necessário

    p.nr p.nomep f.nc
    9302 Lancia 11001

    9303 Fiat 11001

    9303 Fiat 20112

    9304 UMM 11001

    9304 UMM 21012

    9304 UMM 23456



    --------------------------------------------------------

    O único que deveria aparecer deveria ser o lancia mas eu não tou a conseguir... alguém pode ajudar?!
     
  2. samahong

    samahong Power Member

    Se queres só os projectos do fornecedor '11001', não achas que devias incluir essa restrição no where da tua query?
     
  3. Xikinho90

    Xikinho90 Power Member

    Sim mas eu quero os que são totalmente fornecidos, pelo 11001, logo um que seja fornecido pelo 21012 e 11001 não serve, eu não consigo... deve de me tar a falhar qualquer coisa, porque isto era suposto ser simples
     
  4. samahong

    samahong Power Member

    Assim acho que dá:


    Código:
    SELECT
    	a.nr, a.nomep, b.nc
    FROM
    	(
    	-- Assim Obtemos todos os projectos só com um fornecedor
    	SELECT
    		p.nr, p.nomep, count(distinct f.nc) n_fornecedores
    	FROM
    		proj p, forn f, fcp
    	WHERE
    		(fcp.proj = p.nr) 
    		and (fcp.forn = f.nc)	
    	GROUP BY
    		p.nr, p.nomep
    	HAVING
    		n_fornecedores = 1
    	) a,	
    	(
    	-- Obtemos o nº dos projectos que tiveram o 11001 como fornecedor
    	SELECT 
    		distinct p.nr, f.nc
    	FROM
    		proj p, forn f, fcp
    	WHERE
    		(fcp.proj = p.nr) 
    		and (fcp.forn = f.nc)
    		and f.nc = 11001
    	) b
    WHERE
    	a.nr = b.nr
    
    Espero ter ajudado.
     
  5. Xikinho90

    Xikinho90 Power Member

    Daqui um bocado vou testar, acho que não é bem isso mas parece ter sido uma boa ajuda

    O objectivo é ver os projectos totalmente fornecidos pelo 11001, e o 11001 pode fornecer mais que uma peça para um projecto...
     
  6. Xikinho90

    Xikinho90 Power Member

    Já consegui, ontem cheguei a estar lá perto, mas só hoje na aula descobri a resolução,


    Select nome, proj,count(forn) as n
    From
    (select p.nomep as nome, proj, forn
    From fcp, proj p
    Where (fcp.proj = p.nr)
    Group by proj, forn)
    Group by proj
    Having n<2
     

Partilhar esta Página