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

Realizar UPDATE a través de un VIEW

Estas en el tema de Realizar UPDATE a través de un VIEW en el foro de Mysql en Foros del Web. Se puede realizar un UPDATE colocando en la condición que compare un valor dentro de un view? Aglo como: Update miTabla set valor where valorAComparar ...
  #1 (permalink)  
Antiguo 15/04/2009, 18:53
 
Fecha de Ingreso: octubre-2008
Mensajes: 109
Antigüedad: 15 años, 6 meses
Puntos: 0
Realizar UPDATE a través de un VIEW

Se puede realizar un UPDATE colocando en la condición que compare un valor dentro de un view?

Aglo como:

Update miTabla
set valor
where valorAComparar IN (select * from miVista )


En si lo que quiero hacer es que debo buscar los valores que no estan en miVista, los busque en miTabla y les cambie el valor.
Ya estuve tratando y no doy como resolver esto.
  #2 (permalink)  
Antiguo 15/04/2009, 19:23
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Realizar UPDATE a través de un VIEW

Cita:
Se puede realizar un UPDATE colocando en la condición que compare un valor dentro de un view?
Si se puede.

Cita:
Aglo como:

Update miTabla
set valor
where valorAComparar IN (select * from miVista )
Si.. algo como eso.

Que error te muestra cuando intentas esa consulta?
cuantos campos tiene la vista?

Recuerda que cuando ingresas un select comparado con la clausula in,
debe tener un solo campo, o listar un solo campo.

Prueba con

Código mysql:
Ver original
  1. Update miTabla
  2. set valor = tu_valor
  3. where valorAComparar IN (select valor_comparar from miVista )

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 16/04/2009, 11:50
 
Fecha de Ingreso: octubre-2008
Mensajes: 109
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Realizar UPDATE a través de un VIEW

Saludos .
Cambié un poco mi query.
Lo explico: primero hago una subconsulta donde me seleccione los cctt del a tabla historia donde ava_fis sea igual a 100 pero como existen otros registros duplicados con el mismo cctt pero diferente id pues no hace el filtrado correcto.
Por lo que después que hace la subconsulta se me occurió que de los cctt que haya encontrado solo obtenga la primera incidencia , en este caso lo hago usando min pues sería el dato que tenga ava_fis = 100 por lo que los demás ya no me importan.



Código sql:
Ver original
  1. SELECT MIN(id) FROM historia
  2. WHERE id IN(SELECT cctt,MIN(id)
  3. FROM historia WHERE ava_fis=100
  4. GROUP BY id
  5. ORDER BY cctt)

Pero ahora me sale un error y me sale esto:
Código:
Operand should contain 1 column(s)
A que se debe el error?
  #4 (permalink)  
Antiguo 16/04/2009, 12:21
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Realizar UPDATE a través de un VIEW

Ese error se debe a que le estas enviando dos columnas a la clausula in. Era lo que te decía en el post anterior.
Operand should contain 1 column(s). = Operando debe contener 1 columna.


Si logré decifrar tu codigo, esto te puede servir:

Código mysql:
Ver original
  1. SELECT min(id) FROM historia
  2. WHERE id IN(SELECT cctt
  3. FROM historia WHERE ava_fis=100
  4. and id = (select min(id) from historia)
  5. GROUP BY cctt ORDER BY cctt)

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 20/04/2009, 12:28
 
Fecha de Ingreso: octubre-2008
Mensajes: 109
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Realizar UPDATE a través de un VIEW

Casi lo tengo pero ahora me da el mismo error con otro query.

Verán tengo este query que me todos los valores donde el id es el menor o la primera incidendcia:
Código sql:
Ver original
  1. SELECT cctt,MIN(id),ava_fis
  2. FROM historia
  3. WHERE  ava_fis=100  GROUP BY cctt ORDER BY id

Esto es lo que quiero pero a la inversa
Entonces decidí meterlo en un subquery para que me de todos los valores que son mayor al primer id que encuentre.

Una mejor explicacion del primer query con los resultados:

Código:
cctt             id
'01DJN0082F1', 14    -->no quiero que lo muestre en el 2do query
'01DJN0082F1', 21546 -->quiero que lo muestre en el 2do query 
'01DJN0082F1', 23735 -->quiero que lo muestre en el 2do query
'01DJN0082F1', 25924 -->quiero que lo muestre en el 2do query
'01DJN0082F1', 28113 -->quiero que lo muestre en el 2do query

Este es el query final de donde quiero obtener los valores mayores
Código sql:
Ver original
  1. SELECT cctt,id,ava_fis
  2. FROM historia
  3. WHERE
  4. id > (SELECT cctt,MIN(id),ava_fis
  5. FROM historia WHERE  ava_fis=100  GROUP BY cctt ORDER BY id)

Y me tira el error de
Código:
Operand should contain 1 column(s)
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 07:02.