Select Para Registros que Faltam
26/06/2004
0
Pessoal tenhu uma duvida... Como Fazer um select que me retorne todos os valores da tabela A que não estejam cadastrados na tabela B.
Na versão 4.1 podemos trabalhar com clausulas tipo
´Where Not In´ dentro de subqueries.... mas eu não posso usar a versão 4.1 somente a 4.0 então alguem pode me dar uma luz>?
Na versão 4.1 podemos trabalhar com clausulas tipo
´Where Not In´ dentro de subqueries.... mas eu não posso usar a versão 4.1 somente a 4.0 então alguem pode me dar uma luz>?
Lucasnishimura
Curtir tópico
+ 0
Responder
Posts
28/06/2004
Kandrus
Da uma olhada neste texto acho que é disso que vc esta precisando
Atualmente o MySQL suporta somente sub seleções de um formulário INSERT ... SELECT ... e REPLACE ... SELECT .... Entretanto, você pode usar a função IN() em outros contextos.
Em alguns casos você pode reescrever a query sem uma sub seleção:
SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);
Isto pode ser reescrito como:
SELECT table1.* FROM table1,table2 WHERE table1.id=table2.id;
As queries:
SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2);
SELECT * FROM table1 WHERE NOT EXISTS (SELECT id FROM table2 where table1.id=table2.id);
Podem ser reescritas como:
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id where table2.id IS NULL
Para subqueries mais complexas você pode às vezes criar tabelas temporárias para armazenar a subquery. Em alguns casos, entretanto, essa opção não irá funcionar. O mais frequentemente encontrado destes casos aparece em instruções DELETE, para o qual padrão SQL não suporta joins (exceto nas sub-queries. Para esta situação existem duas opções disponível até que subqueries sejam suportadas pelo MySQL.
Atualmente o MySQL suporta somente sub seleções de um formulário INSERT ... SELECT ... e REPLACE ... SELECT .... Entretanto, você pode usar a função IN() em outros contextos.
Em alguns casos você pode reescrever a query sem uma sub seleção:
SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);
Isto pode ser reescrito como:
SELECT table1.* FROM table1,table2 WHERE table1.id=table2.id;
As queries:
SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2);
SELECT * FROM table1 WHERE NOT EXISTS (SELECT id FROM table2 where table1.id=table2.id);
Podem ser reescritas como:
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id where table2.id IS NULL
Para subqueries mais complexas você pode às vezes criar tabelas temporárias para armazenar a subquery. Em alguns casos, entretanto, essa opção não irá funcionar. O mais frequentemente encontrado destes casos aparece em instruções DELETE, para o qual padrão SQL não suporta joins (exceto nas sub-queries. Para esta situação existem duas opções disponível até que subqueries sejam suportadas pelo MySQL.
Responder
Clique aqui para fazer login e interagir na Comunidade :)