Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/06/2009, 22:52
SebasSebas
 
Fecha de Ingreso: junio-2008
Mensajes: 71
Antigüedad: 15 años, 10 meses
Puntos: 0
Dos cuestiones con Update

1) El primer problema es que quiero usar en un update un valor que sea el último valor (específicamente un index primary key) añadido en X tabla.

Es decir, algo así. En la tablaA, quiero actualizar el campo1 con el valor más nuevo del primary key de la tablaB.

Hasta ahora me he visto la función LAST() y la función LAST_INSERT_ID(), pero parece que solo sirven para retornar valores en select o en having, incluso esta última parece que no me sirve si otra persona (o no se si el manual se refiere a usuario de DB) hace una entrada e incrementa el valor.

Hasta ahora he tratado cosas como estas, desde medio lógicas hasta disparates a ver si me resultan:

Es decir algo así:
Código sql:
Ver original
  1. UPDATE tabla_1 AS t1, tabla_2 AS t2
  2.     SET
  3.         t1.campo1 = t2.campo_primarykey
  4.     WHERE
  5.         t1.campo_id = X AND
  6.         t2.campo_primarykey = MAX (t2.campo_primarykey)

Código sql:
Ver original
  1. UPDATE tabla_1 AS t1
  2.     SET
  3.         t1.campo1 = campo_primarykey
  4.     WHERE
  5.         t1.campo_id = X
  6.     HAVING
  7.         MAX (tabla_2.campo_primarykey) AS campo_primarykey

Código sql:
Ver original
  1. UPDATE tabla_1 AS t1, tabla_2 AS t2
  2.     SET
  3.         t1.campo1 = last_insert_id(tabla_2.campo_primarykey)
  4.     WHERE
  5.         t1.campo_id = X

Usando tanto MAX, como LAST, como LAST_INSERT_ID y nada.

¿alguna idea? ¿es posible lo que busco?

(olvidaba decir que sé que haciendo un select justo antes se acaba el dilema, pero quiero ahorrármelo )

2) Lo otro es que quisiera saber si es posible usar INNER JOIN con UPDATEs

Hasta ahora he venido usando cosas así:

Código sql:
Ver original
  1. UPDATE t1
  2.     SET
  3.         t1.campo1 = valor
  4.     WHERE
  5.         t1.campo1 = t2.campo1 AND
  6.         t2.campo2 = t3.campo2 AND
  7.         t3.campo3 = t4.campo4 AND
  8.         t4.campo5 = A;

Pero me recuerda mucho a como no deben hacerse los SELECT pudiéndose usar INNER JOINs y ya que vine a preguntar una cuestión de updates aprovecho el viaje para esta duda que siempre he tenido

Gracias adelantadas

Última edición por SebasSebas; 20/06/2009 a las 23:01