Ver Mensaje Individual
  #3 (permalink)  
Antiguo 08/02/2010, 02:21
Joaquin2111
 
Fecha de Ingreso: diciembre-2009
Mensajes: 40
Antigüedad: 15 años
Puntos: 0
Respuesta: Dudas con LEFT JOIN

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Código MySQL:
Ver original
  1. SELECT p.nombre, a.id_atributo
  2. FROM atributos a LEFT JOIN privacidad p ON a.id_atributo = p.id_atributo
  3. WHERE p.nombre AND p.nombre IS NULL;
Pues a mi esto no me funciona, entiendo que el AND debería ser un OR, ya que es imposible que se cumpla que nombre tenga y no tenga valor al mismo tiempo.

Pongo el código de creación de las tablas y la consulta que realizo a ver si así alguien puede echarme una mano.

Código SQL:
Ver original
  1. CREATE TABLE `atributos` (
  2.     `id_atributo` INT(10) NOT NULL AUTO_INCREMENT,
  3.     `nombre` VARCHAR(50) NOT NULL,
  4.     `columna` VARCHAR(50) NOT NULL,
  5.     PRIMARY KEY (`id_atributo`)
  6. )
  7. ENGINE=InnoDB
  8. ROW_FORMAT=DEFAULT
  9. AUTO_INCREMENT=3
  10.  
  11. CREATE TABLE `privacidad` (
  12.     `id_usuario` INT(10) NOT NULL,
  13.     `id_atributo` INT(10) NOT NULL,
  14.     `privacidad` TINYINT(3) NOT NULL,
  15.     PRIMARY KEY (`id_usuario`, `id_atributo`),
  16.     INDEX `fk_Privacidad_Atritubos` (`id_atributo`),
  17.     INDEX `fk_Privacidad_usuarios1` (`id_atributo`),
  18.     CONSTRAINT `fk_Privacidad_usuarios1` FOREIGN KEY (`id_atributo`) REFERENCES `usuarios` (`id_usuario`) ON UPDATE NO ACTION ON DELETE NO ACTION,
  19.     CONSTRAINT `fk_Privacidad_Atritubos` FOREIGN KEY (`id_atributo`) REFERENCES `atributos` (`id_atributo`) ON UPDATE NO ACTION ON DELETE NO ACTION
  20. )
  21. ENGINE=InnoDB
  22. ROW_FORMAT=DEFAULT
  23.  
  24. SELECT *
  25. FROM atributos a LEFT JOIN privacidad p ON a.id_atributo = p.id_atributo

Atributos tiene solo dos registros.
id_atributo: 1 nombre: Nombre columna: nombre
id_atributo: 2 nombre: Apellidos columna: apellidos

Privacidad tiene 3 registros
id:usuario: 1 id_atributo: 1 privacidad 3
id:usuario: 1 id_atributo: 2 privacidad 3
id:usuario: 38 id_atributo: 2 privacidad 3

El resultado que devuelve es el siguiente:

"id_atributo";"nombre";"columna";"id_usuario";"id_ atributo";"privacidad"
"1";"Nombre";"nombre";"1";"1";"3"
"1";"Nombre";"nombre";"38";"1";"3"
"2";"Apellidos";"apellidos";"1";"2";"3"

Yo quiero que me devuelva para el id_usuario 38 todos los registros de atributos que no tienen conexión.

Es posible esto o estoy yo muy equivocado?

Gracias.