Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

MrHimbos

Consulta

Recommended Posts

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.

 

 

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Seria desse forma:

 

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.