Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá a todos.
Gostaria de saber se alguém poderia me auxiliar a resolver um problema de um trabalho no Oracle que estou fazendo.
Uma das perguntas é a seguinte: Preciso listar um navio que tem status "Danificado" mas que supostamente foi concertado e participou de outra batalha.
Segue abaixo imagem.
/applications/core/interface/imageproxy/imageproxy.php?img=http://1-ps.googleusercontent.com/x/www.scriptbrasil.com.br/i.imgur.com/x5xBdKfi.png.pagespeed.ic.jE_IWerQbe.png&key=b21f1b57be3a8479510e0d1b2378639539f7f2e45496d9c468e3deabc860d336" alt="x5xBdKfi.png.pagespeed.ic.jE_IWerQbe.png" />
Alguém saberia como devo fazer para realizar esta consulta? preciso usar where exists ou where not exists .
Muito Obrigado!
_EDIT_
consegui efetuar a consulta da seguinte maneira:
> SELECT o.SHIP from OUTCOMES o, OUTCOMES o2 where o.SHIP = o2.SHIP and o.RESULT = 'damaged' and o.BATTLE <> o2.BATTLE;
Porém eu posso ter um barco "OK" em uma guerra que aconteceu antes da guerra que ele ficou "damaged" e isso mostraria na consulta, portanto preciso usar as datas das batalhas
E meu professor exigiu que o comando seja feito com operador divisão, creio que tenha que usar o where exists e where not exists
Obrigado.
Seria desse forma:
/applications/core/interface/imageproxy/imageproxy.php?img=http://i.imgur.com/JcDNtVe.png&key=16d5cf3994e60f26da72c20ca4670e0f342a74ca8d56115ef59173ee0c24ac63" alt="JcDNtVe.png" />
Ele também disse que não era pra usar containts.
@Motta, se eu usar aquela query la de cima, como faria para complementar a mesma fazendo comparação das datas das batalhas para que não haja o problema de um barco voltar da guerra ok e posteriormente ficar damaged e ser incluido no resultado da consulta.
Este exemplo é a solução clássica usando divisão para listar todoscde uma n:m .
No caso de "participou de outra batalha " basta um EXISTS.
Você teria um exemplo de como seria isso? Porque também tem a questão da data, obrigado.
Eu consegui resolver da seguinte maneira:
>
SELECT o.SHIP from OUTCOMES o, OUTCOMES o2, BATTLES b, BATTLES b2 where o.SHIP = o2.SHIP and o.RESULT = 'damaged' and
o.BATTLE = b.NAME and o2.BATTLE = b2.NAME and b.DATA < b2.DATA;
Porém não sei se meu professor vai aceitar, por isso gostaria de usar o exists e not exists, apesar desta acima estar funcionando perfeitamente.
Como se quer DIVISÂO terá de fazer algo se não existe status superior, creio.
mas não entendi bem a DIVISÂO nesta questão.