SQL - Modificar un Registro que cumple varias condiciones

   
Vista:

Modificar un Registro que cumple varias condiciones

Publicado por Malow (19 intervenciones) el 19/10/2015 11:52:07
Buenas, estoy aprendiendo SQL y les quería hacer una consulta sobre como modificar los registros en base al cumplimiento de varias condiciones en una tabla. Les pongo un ejemplo de manera simplificada:

La tabla Producto P tiene las columnas Id_Producto, Uso_Producto, Tamaño_Producto, (otros)
La tabla UsoProducto UP tiene las columnas Id_Producto, Uso_Producto, Descripción, (otros)
La tabla TamañoProducto TP tiene las columnas Id_Producto, Tamaño_Producto, Descripción (otros)
(se unen por Id_Producto)

Supongamos que :
UP.Uso_Producto y UP. Descripción es 1=Lectura, 2=Escritura, 3=Pintura, 4=Grabado
TP.Tamaño_Producto y TP.Descripción es A=Grande, B=Mediano, C=Pequeño

Necesitaría hacer una consulta en la que primero me cumpla la condición de uso y luego la de tamaño. Por ejemplo:

Si UP.Uso_Producto= 1 y TP.Tamaño= A que en la consulta me salga XXX
Si UP.Uso_Producto= 1 y TP.Tamaño= B que en la consulta me salga YYY
Si UP.Uso_Producto= 1 y TP.Tamaño= C que en la consulta me salga ZZZ
Si UP.Uso_Producto= 2 y TP.Tamaño= A que en la consulta me salga AAA
Si UP.Uso_Producto= 2 y TP.Tamaño= B que en la consulta me salga BBB
ETC...

De modo que en la consulta me aparezca:

Id_Producto, Uso_Producto, Tamaño_Producto, Condición de Uso y Tamaño
1..........................2........................A...................................AAA
2..........................1........................A...................................XXX
3..........................2........................B...................................BBB
4..........................3........................C...................................QQQ


Espero que estén todos los datos necesarios, muchas gracias de antemano!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

Modificar un Registro que cumple varias condiciones

Publicado por Isaias (690 intervenciones) el 19/10/2015 19:02:36
¿En que motor de base de datos estas trabajando?, Si lo soporta tu motor, con un CASE será suficiente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Modificar un Registro que cumple varias condiciones

Publicado por Malow (19 intervenciones) el 20/10/2015 08:15:57
Los CASE me funcionan Isaias, pero no sé como poner varias condiciones. Estoy utilizándolo así:

1
2
3
4
5
Uso_Producto = CASE UP.Uso_Producto
					when '1' then 'Lectura'
					when '2' then 'Escritura'
					when '3' then 'Pintura'
					when '4' then Grabado'

Y lo que necesito es algo parecido a esto:

1
2
3
4
5
6
Uso_Producto = CASE UP.Uso_Producto ; Tamaño = CASE TP.Tamaño
					when '1'  and when 'A' then 'XXX'
					when '1'  and when 'B' then 'YYY'
					when '1'  and when 'C' then 'ZZZ'
					when '2'  and when 'A' then 'QQQ'
                                        ETC
Muchas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Modificar un Registro que cumple varias condiciones

Publicado por leonardo_josue (877 intervenciones) el 20/10/2015 18:33:41
Hola Malow:

Aunque Isaías ya lo preguntó, no nos dices con qué motor de BD's estás trabajando, por lo tanto es complicado darte una respuesta puntual.

La mayoría de los DBMS's trabajan con el CASE-WHEN de dos formas, CASE SENCILLA o CASE de BUSQUEDA, checa esta liga

https://msdn.microsoft.com/es-es/library/ms181765(v=sql.120).aspx

En tu caso, estás utilizando la forma sencilla del CASE-WHEN, que consiste en comparar un campo y los valores que puede tomar ese campo en particular, sin embargo, como necesitas comparar más de una variable o condición, debes utilizar la segunda forma, sería algo asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
mysql> SELECT * FROM tabla;
+--------+--------+
| campo1 | campo2 |
+--------+--------+
| 1      | A      |
| 1      | B      |
| 1      | C      |
| 2      | A      |
+--------+--------+
4 rows in set (0.00 sec)
 
mysql> SELECT
    ->   campo1, campo2,
    ->   CASE WHEN (campo1 = '1' AND campo2 = 'A') THEN 'XXX'
    ->        WHEN (campo1 = '1' AND campo2 = 'B') THEN 'YYY'
    ->        WHEN (campo1 = '1' AND campo2 = 'C') THEN 'ZZZ'
    ->        ELSE 'otro'
    ->   END calculado
    -> FROM tabla;
+--------+--------+-----------+
| campo1 | campo2 | calculado |
+--------+--------+-----------+
| 1      | A      | XXX       |
| 1      | B      | YYY       |
| 1      | C      | ZZZ       |
| 2      | A      | otro      |
+--------+--------+-----------+
4 rows in set (0.00 sec)

Cada WHEN es independiente y puede contener condiciones adicionales si así lo deseas, se comporta como los IF's anidados en programación. El ejemplo está en MySQL, pero debería ser válido para la mayoría de los DBMS's que soporten el CASE-WHEN

Dale un vistazo para ver si te sirve.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Modificar un Registro que cumple varias condiciones

Publicado por Malow (19 intervenciones) el 23/10/2015 10:09:50
Muchas gracias Leo, me funciona correctamente! con esto voy a ahorrar mucho trabajo, gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar