Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

seleccionar campos con valores null

Estas en el tema de seleccionar campos con valores null en el foro de Mysql en Foros del Web. espero puedan ayudarme necesito selecionar todos los productos sin importar que no tenga ningun valor definido. mis tablas: Tabla-VehiculoQuetienenproducto ID, codebarra, año, marca, modelo, version, ...
  #1 (permalink)  
Antiguo 04/09/2017, 20:29
Avatar de jsstoni  
Fecha de Ingreso: enero-2015
Ubicación: Maracaibo
Mensajes: 81
Antigüedad: 4 años, 9 meses
Puntos: 4
seleccionar campos con valores null

espero puedan ayudarme necesito selecionar todos los productos sin importar que no tenga ningun valor definido.

mis tablas:

Tabla-VehiculoQuetienenproducto

ID, codebarra, año, marca, modelo, version, motor
1, 123, null, Honda, Pilot, null, null,null
2, 234, 2013, Honda, Pilot, Touring 4x4, V6 3.5 24V
3, 456, null, null, null, null, null

Tabla-productos

ID, nombre, codebarras, clase1, clase2, clase3
1, disco freno, 123, Mantenimiento, freno, NULL
2, Tapón de carter, 234, Mantenimiento , Motor y relacionados , Carter / Relacionados
3, aceite motor, 456, Aditivos / Grasas / Lubricantes, Aceites de motor, NULL


debo seleccionar segun este filtro "año, marca,modelo,version, motor"

hay 3 niveles:
1) los que tienen todos los requisitos del vehiculo definido (año, marca,modelo,version, motor)
2) los que solo tienen definido como (marca, modelo)
3) los que no tienen ningun vehiculo definido (los productos aplica para todos los vehiculos)
__________________
Desarrollo web Front End Realtime NodeJs
  #2 (permalink)  
Antiguo 05/09/2017, 02:28
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 10 años, 2 meses
Puntos: 214
Respuesta: seleccionar campos con valores null

Saludo

¿Y cuales consultas has hecho?

No veo ningún código sql en tu post.

Se ven dos tablas, pero no veo cual es la relación entre ellas.

Uhm, pues te invito a que postees con calma
nos cuentes cuales campos relacionan a las tablas,
y pongas ejemplos claros de lo que quieres obtener.

Igual serviría saber si estas trabajando con algún framework
o si estas consultas son para ejecutar en el motor de la bd
directamente sin que tenga interacción con alguna aplicación
donde diligencien ciertos datos y luego a partir de estos
se genere la consulta a la bd.
__________________
"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
  #3 (permalink)  
Antiguo 05/09/2017, 07:21
Avatar de jsstoni  
Fecha de Ingreso: enero-2015
Ubicación: Maracaibo
Mensajes: 81
Antigüedad: 4 años, 9 meses
Puntos: 4
Respuesta: seleccionar campos con valores null

Cita:
Iniciado por mortiprogramador Ver Mensaje
Saludo

¿Y cuales consultas has hecho?

No veo ningún código sql en tu post.

Se ven dos tablas, pero no veo cual es la relación entre ellas.

Uhm, pues te invito a que postees con calma
nos cuentes cuales campos relacionan a las tablas,
y pongas ejemplos claros de lo que quieres obtener.

Igual serviría saber si estas trabajando con algún framework
o si estas consultas son para ejecutar en el motor de la bd
directamente sin que tenga interacción con alguna aplicación
donde diligencien ciertos datos y luego a partir de estos
se genere la consulta a la bd.
Saludos.

Código SQL:
Ver original
  1. SELECT * FROM productosVehiculos AS v LEFT JOIN productos ON (v.codigobarras = p.codigobarras) WHERE v.ano = '2013' AND v.marca = 'Honda' AND v.modelo = 'Pilot' AND v.version = 'Touring 4x4' AND v.motor = 'V6 3.5 24V';

con esta consulta muestro los productos pero solo me toma los resultados cuyo valores estan definidos todos.

itente con un OR pero me dio como resultado datos no coherentes.
__________________
Desarrollo web Front End Realtime NodeJs
  #4 (permalink)  
Antiguo 05/09/2017, 08:34
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.404
Antigüedad: 13 años, 2 meses
Puntos: 774
Respuesta: seleccionar campos con valores null

en una sola consulta no vas a poder sacar esos resultados, ya que son excluyentes entre si, aqui tendrias que hacer dependiendo de los parametros una u otra consulta
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 05/09/2017, 15:20
Avatar de jsstoni  
Fecha de Ingreso: enero-2015
Ubicación: Maracaibo
Mensajes: 81
Antigüedad: 4 años, 9 meses
Puntos: 4
Respuesta: seleccionar campos con valores null

Cita:
Iniciado por Libras Ver Mensaje
en una sola consulta no vas a poder sacar esos resultados, ya que son excluyentes entre si, aqui tendrias que hacer dependiendo de los parametros una u otra consulta
por donde debo comenzar ?
__________________
Desarrollo web Front End Realtime NodeJs
  #6 (permalink)  
Antiguo 05/09/2017, 15:28
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.404
Antigüedad: 13 años, 2 meses
Puntos: 774
Respuesta: seleccionar campos con valores null

Tu dime, es tu proceso no el mio, y no se como lo estas codificando, yo solo te digo que en un solo query no sale
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 05/09/2017, 21:57
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 10 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 original
  1. CREATE TABLE productos(id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, nombre VARCHAR(120), codebarras INT(6) NOT NULL,
  2. clase1 VARCHAR(120), clase2 VARCHAR(120), clase3 VARCHAR(120));
  3.  
  4. CREATE TABLE productosVehiculos (id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, codigobarras INT(6), año VARCHAR(4),
  5. marca VARCHAR(120), modelo VARCHAR(120), version VARCHAR(120), motor VARCHAR(120));
  6.  
  7. INSERT INTO  productos(nombre, codebarras, clase1, clase2, clase3) VALUES
  8. ('disco freno', 123, 'Mantenimiento', 'freno', NULL),
  9. ('Tapón de carter', 234, 'Mantenimiento', 'Motor y relacionados', 'Carter / Relacionados'),
  10. ('aceite motor', 456, 'Aditivos / Grasas / Lubricantes', 'Aceites de motor', NULL);
  11.  
  12. INSERT INTO  productosVehiculos (codigobarras, año, marca, modelo, version, motor) VALUES
  13. (123, NULL, 'Honda', 'Pilot', NULL, NULL),
  14. (234, 2013, 'Honda', 'Pilot', 'Touring 4x4', 'V6 3.5 24V'),
  15. (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
  1. -- Solo traigo los campos que considero necesarios, manejar el * es bueno para traer todo de zopetón,
  2. -- pero eso va a tardar más en traer la info, y más si son muchos datos
  3. 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
  4. FROM productosVehiculos v
  5. LEFT JOIN productos p
  6. ON v.codigobarras = p.codebarras
  7. -- 1) los que tienen todos los requisitos del vehiculo definido (año, marca,modelo,version, motor)
  8. 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 original
  1. 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
  2. FROM productosVehiculos v
  3. LEFT JOIN productos p
  4. ON v.codigobarras = p.codebarras
  5. -- 2) los que solo tienen definido como (marca, modelo)
  6. 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 original
  1. 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'
  2. 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 original
  1. OR (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

Etiquetas: null, productos, sql, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:38.