SQLouco

Re: SQLouco

por Rafael Sampaio -
Número de respostas: 0

Oi, Henrique:

Acho que você precisa tomar cuidado com o que quer responder. Nesse bd, não temos como saber o que cada agricultor produz, e sim o que eles já entregaram. (Observe que os itens 'e' e 'f' usam também essa expressão.)

Supondo agora que você queira responder quais agricultores nunca entregaram cebolas, note que você precisa saber primeiro quais entregaram. Por quê? Porque um agricultor pode ter entregado cebola e algum outro produto a um restaurante. Esse é o erro na sua consulta: você exclui os agricultores que já entregaram cebola, mas eles entregaram outros produtos, logo os códigos deles aparecem no resultado da consulta.

Um jeito simples de fazer seria este:

SELECT DISTINCT CodA FROM Entrega WHERE codA
NOT IN (
        SELECT DISTINCT CodA FROM Entrega WHERE codP = 2003
);

A consulta interna me devolve todos os códigos (distintos) de quem já entregou cebola e a consulta mais externa me devolve todos os códigos (distintos) daqueles que não estão entre os que entregaram cebola. E aí você verá que apenas o poeta Oswald não gostava das cebolas! sorriso

Existem outras formas de escrever essa consulta. Pense nisso!

Abraço,
Rafael