Cita:
Iniciado por gnzsoloyo 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 originalCREATE TABLE `atributos` (
`id_atributo` INT(10) NOT NULL AUTO_INCREMENT,
`nombre` VARCHAR(50) NOT NULL,
`columna` VARCHAR(50) NOT NULL,
PRIMARY KEY (`id_atributo`)
)
ENGINE=InnoDB
ROW_FORMAT=DEFAULT
AUTO_INCREMENT=3
CREATE TABLE `privacidad` (
`id_usuario` INT(10) NOT NULL,
`id_atributo` INT(10) NOT NULL,
`privacidad` TINYINT(3) NOT NULL,
PRIMARY KEY (`id_usuario`, `id_atributo`),
INDEX `fk_Privacidad_Atritubos` (`id_atributo`),
INDEX `fk_Privacidad_usuarios1` (`id_atributo`),
CONSTRAINT `fk_Privacidad_usuarios1` FOREIGN KEY (`id_atributo`) REFERENCES `usuarios` (`id_usuario`) ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT `fk_Privacidad_Atritubos` FOREIGN KEY (`id_atributo`) REFERENCES `atributos` (`id_atributo`) ON UPDATE NO ACTION ON DELETE NO ACTION
)
ENGINE=InnoDB
ROW_FORMAT=DEFAULT
SELECT *
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.