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

