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

update tabla usando tres tablas

Estas en el tema de update tabla usando tres tablas en el foro de Bases de Datos General en Foros del Web. buenas noches, tengo un error de sintaxis en la siguiente expresión que no logro correrla. quiero hacer un update de una tabla, según el valor ...
  #1 (permalink)  
Antiguo 01/12/2016, 18:56
 
Fecha de Ingreso: octubre-2010
Mensajes: 154
Antigüedad: 14 años, 1 mes
Puntos: 5
update tabla usando tres tablas

buenas noches, tengo un error de sintaxis en la siguiente expresión que no logro correrla.
quiero hacer un update de una tabla, según el valor de otras tres tablas.

una tabla de contabilidad (master), y otras dos de cuotas/recibos (cuota), y el pago o no de estos recibos (cuotamovimiento).

quiero actualizar la tabla master, con el valor del recibo que figura en la tabla CUOTA.

con la siguiente sentencia:
Código SQL:
Ver original
  1. UPDATE master AS m SET detalle='NRO.RECIBO:'+c.nro_recibo, tipo_comp=8, tipo_movimiento='CP',importe = 0.0
  2. WHERE
  3.  (SELECT c.nro_recibo FROM cuotamovimiento cm, cuota c
  4.   WHERE cm.id = m.id_movimiento AND  cm.pagado =1 AND cm.id_cuota = c.id);

me tira el siguiente error:
Código SQL:
Ver original
  1. UNKNOWN COLUMN 'c.nro_recibo' IN 'field list'    ErrorNro: 1054


si lo corro de la siguiente manera:
Código SQL:
Ver original
  1. UPDATE master AS m SET detalle='NRO.RECIBO:'+c.nro_recibo,tipo_comp=8,tipo_movimiento='CP',importe = 0.0
  2. WHERE (SELECT * FROM cuotamovimiento cm, cuota c
  3.   WHERE cm.id = m.id_movimiento AND  cm.pagado =1 AND cm.id_cuota = c.id);
me tira el siguiente error:
Código SQL:
Ver original
  1. Operand should contain 1 COLUMN(s)    ErrorNro: 1241

Alguien tiene idea de como puedo correr esta actualización?
desde ya muchas gracias.
  #2 (permalink)  
Antiguo 02/12/2016, 08:37
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: update tabla usando tres tablas

1.-usa joins explicitos en lugar de joins implicitos
2.-Cuando uses un update con un subquery asegurate de usar un alias en el subquery:

Código SQL:
Ver original
  1. UPDATE master AS m SET detalle='NRO.RECIBO:'+completa.nro_recibo, tipo_comp=8, tipo_movimiento='CP',importe = 0.0
  2. WHERE
  3.  (SELECT c.nro_recibo FROM cuotamovimiento cm, cuota c
  4.   WHERE cm.id = m.id_movimiento AND  cm.pagado =1 AND cm.id_cuota = c.id)
  5. AS completa WHERE m.id_movimiento=completa.id_movimiento

3.-Para el ultimo caso parece que estas regresando mas de una columna con el mismo valor, ahora que manejador de bases de datos esas usando???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 12/12/2016, 10:10
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 15 años, 3 meses
Puntos: 19
Respuesta: update tabla usando tres tablas

Cita:
Iniciado por Libras Ver Mensaje
1.-usa joins explicitos en lugar de joins implicitos
2.-Cuando uses un update con un subquery asegurate de usar un alias en el subquery:

Código SQL:
Ver original
  1. UPDATE master AS m SET detalle='NRO.RECIBO:'+completa.nro_recibo, tipo_comp=8, tipo_movimiento='CP',importe = 0.0
  2. WHERE
  3.  (SELECT c.nro_recibo FROM cuotamovimiento cm, cuota c
  4.   WHERE cm.id = m.id_movimiento AND  cm.pagado =1 AND cm.id_cuota = c.id)
  5. AS completa WHERE m.id_movimiento=completa.id_movimiento

3.-Para el ultimo caso parece que estas regresando mas de una columna con el mismo valor, ahora que manejador de bases de datos esas usando???
Excelente aporte Libras Siempre he tenido una duda parecida, pero nunca decidí hacer la "consulta" con tu ejemplo me queda bien claro como hacer esos Updates, ahora no entendi muy bien la diferencia "Joins Explicitos" y "Joins Implicitos"

y pregunto por curiosidad, el motor de BD, importa al momento de generar ese Update?
  #4 (permalink)  
Antiguo 12/12/2016, 11:09
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: update tabla usando tres tablas

Sip el motor de bases de datos importa, porque en ocasiones cambia un poco la sintaxis o el modo en que lo interpreta el manejador.

Joins implicitos es cuando haces esto select * from tabla1,tabla2 where tabla1.id=tabla2.id, ahi estas haciendo una operacion join de forma implicita(sin declarar) y en ocasiones puede traer problemas de performance, un join explicito es cuando usas la clausula Join select * from tabla1 join tabla2......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 13/12/2016, 09:49
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 15 años, 3 meses
Puntos: 19
Respuesta: update tabla usando tres tablas

Cita:
Iniciado por Libras Ver Mensaje
Sip el motor de bases de datos importa, porque en ocasiones cambia un poco la sintaxis o el modo en que lo interpreta el manejador.

Joins implicitos es cuando haces esto select * from tabla1,tabla2 where tabla1.id=tabla2.id, ahi estas haciendo una operacion join de forma implicita(sin declarar) y en ocasiones puede traer problemas de performance, un join explicito es cuando usas la clausula Join select * from tabla1 join tabla2......
Bueno tenia idea de que fuera eso, pero quería estar seguro y no quedar como tonto, (mas queda como tonto el que no pregunta que el que presume).

Gracias por la Aclaratoria

Etiquetas: tabla, tablas, tres, update, usando
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 10:07.