SERVICIOS: 902 027 102
Busqueda

Sistema web de Comercio Electrónico Lazarus

El sistema de comercio electrónico o tienda virtual Lazarus, es la herramienta web definitiva que le permitirá vender sus productos por internet de una forma eficiente y ágil. Lazarus le permite crear una Tienda Online indistintamente del tipo de producto

Sistema web de Comercio Electrónico Lazarus
Suscribete al boletin

Escribe tu correo electronico para recibir nuestro boletin de articulos.

Registros no coincidentes

Vamos a ver como hacer una consulta que a más de uno le ha vuelto loco alguna vez, extraer los registros NO conincidentes en una Web

 

¿Quién no se ha parado alguna vez a pensar como hacer una consulta que extraiga los registros que NO coinciden entre dos tablas?, pues la verdad es que Yo mismo he pasado por esa situación y para un programador que esté comenzando con SQL le trae un pequeño dilema moral.

A decir verdad la respuesta es bien sencilla, imaginemos el siguiente escenario.

Tenemos una tabla llamada usuarios con los siguientes campos:

IdUsuario (Int)
Nombre (Char)
Apellido (Char)

Ahora tenemos otra con las fotos de estos usuarios:

IdFoto (Int)
IdUsuario (Int)
Foto (Blob)

Si quisiéramos extraer todos los usuarios que no tengan fotografía la consulta sería la siguiente:

Select u.Nombre, f.idfoto From usuarios u Left Join fotos f ON u.idusuario=f.idusuario Where f.idusuario Is Null;

¿Qué hemos hecho?

Pues muy sencillo, hacemos una consulta relacional con una cláusula "Lejt Join", recordemos que esta cláusula no obliga a que los registros coincidan, por lo tanto el resultado devuelto de esta consulta tendría valores nulos (los correspondientes a f.idfoto), lo único que debemos hacer es introducir una cláusula Where indicando que tan solo se desean los valores nulos, los que no están en la tabla fotos.

Como veis no es tan complicado hacer la consulta, tan solo un poco liosa al principio.

Fecha: 19/07/2011 23:49:18 Juan Pablo escribio:

Este tipo de consulta resulta muy ineficiente cuando se trabaja con una tabla que contiene muchos registros.. a continuación una opción que tampoco es la más optima, pero funciona mucho más rápido que la anterior:

SELECT u.Nombre FROM usuarios u WHERE u.idusuario NOT IN (SELECT f.idusuario FROM fotos f );

Fecha: 20/07/2011 9:40:12 Brian Plano escribio:

Creo que te equivocas Juan Pablo,
si añades los índices pertinentes a la tabla de usuarios y fotos la consulta es muy rápida, de hecho, una consulta similar a esta la tenemos trabajando en una base de datos de más de un millón y medio de registros y funciona perfectamente.

Condiciones de Uso | Política de Privacidad
Copyright © 2010 Solingest. Todos los derechos reservados.
Desarrollado por mediante sistema