Olá,

Bem tenho uma questão aqui sobre uma sql. Tenho uma tabela que chama CLONES,
nesta existem os campos CLONES.mae , CLONES.pai
Nessa tabela DEVERIA haver uma autoferencia de CLONES.mae ->
CLONES.variedade e CLONES.pai -> CLONES.variedade , porém ela não existe
( é o que preciso fazer), pois o problema é que está tabela está em uso e
existem entradas tanto em MAE e PAI que não existem na tabela como VARIEDADE
- preciso descobrir quem são estes -, ou seja, se eu adicionar a chave
estrangeira para a autoreferencia ele acusa o erro. Eu quebrei a cabeça aqui
e consegui fazer essa sql:

SELECT a.variedade, a.mae, a.mae IN (SELECT DISTINCT b.variedade FROM clones
b, clones c WHERE b.variedade = c.mae GROUP BY b.variedade) AS resp FROM
clones a

Que me retorna as tuplas com | variedade ( filho ) | mae | resp ( bool ) | .
Ok, funciona porém é muito demorada porque a tabela tem cerca de 10000 mil
registros. Em meu computador
demorou cerca de 5'30'' e no host da locaweb cerca de 4'30' . No caso essa
solucão me serve porque resolve o problema de encontrar as tais maes. Porém
gosto de ter consultar otimizadas e fiquei tentando varias combinacoes
melhor e nao consegui nada. Eu tentei coisas com (NOT) EXISTS ; (NOT) IN.

O que eu gostaria mesmo de fazer seria:

Conjunto A = SELECT DISTINCT b.mae FROM CLONES b => Todas as maes
Conjunto B = SELECT DISTINCT b.variedade FROM clones b, clones c WHERE
b.variedade = c.mae GROUP BY b.variedade => As maes que estao em situacao
correta

Assim precisaria de algo que fizesse A - B

Desculpem o texto longo

Se alguem tiver alguma ideia por favor sinta-se a vontade para opinar.

t+

-- 
Samarone Lopes
_______________________________________________
Lista mailing list
[email protected]
http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br

Responder a