05/09/2017, 20:57
|
| Colaborador | | Fecha de Ingreso: septiembre-2009 Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses Puntos: 214 | |
Respuesta: seleccionar campos con valores null Saludo
Uhm, bueno, leyendo con un poco de calma el post inicial,
creo entender lo siguiente.
Se tiene la tabla productos en donde tendrá un campo llamado codebarras
que es el que se relaciona con la tabla productosVehiculos al campo codebarra
Según entiendo este modelo, en la tabla de productosVehiculos se
insertará la misma información siempre tantos productos como tenga relacionado un vehículo, no??
De ser así, lo mejor sería manejar una tabla vehiculo como tal que tenga
todas las características del vehículo, y luego que en la tabla productosVehiculos
solo esten el id del vehiculo y el id del producto, y luego la consulta tendría
que cambiar a hacer uso de estas tres tablas.
Pero digamos que se mantiene el modelo...
¡Vamos a jugar un rato!
Código SQL:
Ver originalCREATE TABLE productos(id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, nombre VARCHAR(120), codebarras INT(6) NOT NULL, clase1 VARCHAR(120), clase2 VARCHAR(120), clase3 VARCHAR(120)); CREATE TABLE productosVehiculos (id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, codigobarras INT(6), año VARCHAR(4), marca VARCHAR(120), modelo VARCHAR(120), version VARCHAR(120), motor VARCHAR(120)); INSERT INTO productos(nombre, codebarras, clase1, clase2, clase3) VALUES ('disco freno', 123, 'Mantenimiento', 'freno', NULL), ('Tapón de carter', 234, 'Mantenimiento', 'Motor y relacionados', 'Carter / Relacionados'), ('aceite motor', 456, 'Aditivos / Grasas / Lubricantes', 'Aceites de motor', NULL); INSERT INTO productosVehiculos (codigobarras, año, marca, modelo, version, motor) VALUES (123, NULL, 'Honda', 'Pilot', NULL, NULL), (234, 2013, 'Honda', 'Pilot', 'Touring 4x4', 'V6 3.5 24V'), (456, NULL, NULL, NULL, NULL, NULL);
Esto basado en los datos que se incluyeron en el post inicial.
Ahora, si ejecutamos esta consulta.
Código SQL:
Ver original-- Solo traigo los campos que considero necesarios, manejar el * es bueno para traer todo de zopetón, -- pero eso va a tardar más en traer la info, y más si son muchos datos SELECT p.id, p.nombre, p.clase1, p.clase2, p.clase3, v.id, v.codigobarras, v.año, v.marca, v.modelo, v.version, v.motor FROM productosVehiculos v LEFT JOIN productos p ON v.codigobarras = p.codebarras -- 1) los que tienen todos los requisitos del vehiculo definido (año, marca,modelo,version, motor) WHERE v.año = '2013' AND v.marca = 'Honda' AND v.modelo = 'Pilot' AND v.version = 'Touring 4x4' AND v.motor = 'V6 3.5 24V';
Traerá solo un registro (Tapón de carter).
Si ejecutamos esta otra
Código SQL:
Ver originalSELECT p.id, p.nombre, p.clase1, p.clase2, p.clase3, v.id, v.codigobarras, v.año, v.marca, v.modelo, v.version, v.motor FROM productosVehiculos v LEFT JOIN productos p ON v.codigobarras = p.codebarras -- 2) los que solo tienen definido como (marca, modelo) WHERE v.marca = 'Honda' OR v.modelo = 'Pilot' ;
Traerá dos registros (disco freno y Tapón de carter)
Que sería lo mismo que unir las condiciones de los dos querys anteriores
en un solo 'gran query' (como decía una desarrolladora con la que trabaje hace tiempo)
Código SQL:
Ver originalWHERE v.año = '2013' AND v.marca = 'Honda' AND v.modelo = 'Pilot' AND v.version = 'Touring 4x4' AND v.motor = 'V6 3.5 24V' OR (v.marca = 'Honda' OR v.modelo = 'Pilot');
Trayendo los dos registros pues se cumplen las condiciones del punto 1 y 2.
En cuanto al tercer punto 3) los que no tienen ningun vehiculo definido (los productos aplica para todos los vehiculos)
¿Cómo se sabe que no tienen ningún vehículo definido? Al tener todos los campos en NULL?
Entonces podría agregarse este otro condicional al 'gran query'
Código SQL:
Ver originalOR (v.año IS NULL AND v.marca IS NULL AND v.modelo IS NULL AND v.version IS NULL AND v.modelo IS NULL);
Trayendo en este caso tres registros (disco freno, tapón de carter y aceite motor)
Creo que por ahora ya es 'game over',
ya veremos si te sirve así o si quieres otra partida,
en cuyo caso sería genial contar con muchos más datos y demás.
__________________ "Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com |