Mysql, consulta registro sin integridad referencial

Lorenzo Ponce lekronne en yahoo.com
Mar Sep 30 22:26:36 CLT 2008


Ahh pero que desagradable, no hay caso... no quería hacer la consulta por este medio porque sé que existen individuos como este tal rodrigo.... muerdete la lengua hombre! (dedos) que omitas tus comentarios que no me interesan.-


----- Mensaje original ----

De: Rodrigo Fuentealba <the.code.keeper en gmail.com>
Para: Discusion de Linux en Castellano <linux en listas.inf.utfsm.cl>
Enviado: martes, 30 de septiembre, 2008 20:26:44
Asunto: Re: Mysql, consulta registro sin integridad referencial

Lorenzo Ponce <lekronne en yahoo.com> escribió:
> Estimados, en primer lugar, no sé si esta es la lista
> adecuada por lo que no vi una de base de datos,
> si no lo es, favor indicar (con una vez basta).

En general tratamos temas relacionados con bases de datos.

> Tengo una base de datos MyISAM (MySQL), y
> tengo la necesidad de rescatar datos de una
> tabla cuya integridad referencial no existe.

MyISAM... ¿por qué torturan tanto a la gente?

> Es sencillo sacar los que tienen su PK con la
> FK en otra tabla, WHERE idCampo=fkCampo,
> pero lo que quiero es sacar aquellos registros
> que NO tienen hecha la relación.

SELECT tabla1.campo FROM tabla1, tabla2 WHERE tabla1.campo1 NOT IN
(SELECT tabla2.campo2 FROM tabla2);

Eso, ¿cierto?.

http://dev.mysql.com/doc/refman/5.0/en/rewriting-subqueries.html

Haz un query rewrite como el que sigue:

SELECT tabla1.*
  FROM tabla1 LEFT JOIN tabla2 ON tabla1.id=tabla2.id
  WHERE tabla2.id IS NULL;

Con eso deberías tener un improvement.

> He intentado usando selects anidados y funciones
> como NOT IN, lo cual funciona bien con pocos registros

Querrás decir "funciona".

> pero al crecer la cantidad de registros se torna demasiado
> lento por los selects que debe hacer en cada vuelta.

El optimizador de MySQL es horrible.

> Me gustaría me indicaran alguna solución más eficiente.
> Me imagino que llenar de OR la consulta sería poco eficiente
> también.

Yo no veo la forma simple de hacerlo con OR. Por algo parecido mandé a
un tipo a repetir Bases de Datos I.

> Favor, omitir comentarios del tipo cámbiate a postgres,
> u otros, que no contribuyan a la solución de codificación
> requerida.

No te preocupes; no te cambies a PostgreSQL, si al total, son datos de
un cliente nada más, no importa ni integridad ni consistencia ni una
base de datos decente.... (sarcásticamente hablando, claro).

Saludos,

-- 
Rodrigo Fuentealba


      ____________________________________________________________________________________
Premios MTV 2008¡En exclusiva! Fotos, nominados, videos, y mucho más! Mira aquí http://mtvla.yahoo.com/


Más información sobre la lista de distribución Linux