sexta-feira, 15 de outubro de 2010

Comando alternativo ao MINUS

Ontem enfrentei um problema que talvez muitos iniciantes em linguagem SQL podem enfrentar....
Precisava de uma consulta que retornassem algumas colunas e que a chave primária da tabela não estivesse em uma tabela resultada de um SELECT...

Por exemplo:

Tabela clientes: `cliente_codigo`
Tabela produtos: `produto_codigo`
Tabela compras: `produto_codigo`,`cliente_codigo`

Sendo que a tabela `compras` mostra quem comprou algum produto...

O comando em questão seria caso fosse necessário achar aqueles clientes que ainda não efetuaram compras, ou seja, retornar todos os registros da tabela clientes que não estão presentes na tabela compras.
Usando o comando MINUS ficaria assim:

SELECT 'clientes'.'cliente_codigo'
FROM 'clientes'
MINUS
SELECT 'compras'.'cliente_codigo'
FROM 'compras';


Porém somento os clientes do Banco de Dados Oracle que tem essa exclusividades. Para aqueles (que como eu) que usam outro Banco de Dados será necessário usar o comando NOT IN:

SELECT 'clientes'.'cliente_codigo'
FROM 'clientes'
WHERE 'clientes'.'cliente_codigo' NOT IN
(
SELECT 'compras'.'cliente_codigo'
FROM 'compras'
);


Então para aqueles que encontrarem o comando MINUS em publicações, artigos, tutoriais e etc., fica o aviso que este comando é exclusivo do Oracle que uma alternativa é usar o comando NOT IN. Vale ressaltar ainda que há situações em que o NOT IN não consegue substituir o comando MINUS, mas isso já é assunto pra outra hora...

Vale ressaltar que a solução quem me trouxe foi o Prof. Fernando Prass....

Espero ter ajudado...
Abraço

Nenhum comentário:

Postar um comentário