MrHimbos 0 Denunciar post Postado Maio 27, 2014 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. 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. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Maio 27, 2014 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. Compartilhar este post Link para o post Compartilhar em outros sites
MrHimbos 0 Denunciar post Postado Maio 27, 2014 Seria desse forma: 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. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Maio 27, 2014 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. Compartilhar este post Link para o post Compartilhar em outros sites
MrHimbos 0 Denunciar post Postado Maio 28, 2014 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. Compartilhar este post Link para o post Compartilhar em outros sites