Generalmente para utilizar un campo autoincremental en una base de datos, se asigna el valor 0 (cero) o NULL (nulo) y la base de datos nos asignara el numero máximo siguiente. Pero en ocasiones este numero autoincremental esta basado en un numero (o incluso mas) llave. ¿Como hacer para poder generar este numero de manera autoincremental?…
No se… pero en me dijeron que en Postgres era algo así como:
nextval('tabla_campo_seq'::regclass)
Tomando en cuenta que tabla… si, seria el nombre de la tabla……. y adivinaron, campo, seria el campo autoincremental… pero ojo, eso solo funciona si efectivamente el campo es autoincremental. Pero que ocurre cuando el campo tiene una llave antes: Ejem. Dirección -> Subdireccion. La tabla dirección tiene un Iddireccion autoincremental, pero la relación iddireccion,idsubdireccion es igualmente autoincremental con relación al primero…. pues si hay formas mas sencillas de solucionarlo me las dicen, pero ahí les va una posible solución:
SELECT max(idsubdireccion)::numeric(4,0)+1 FROM Tablasubdireccion WHERE Iddireccion=1 GROUP BY Iddireccion
Esto nos regresara el valor maximo siguiente de Subdireccion de la Dirección 1 (uno). Pero como si no existe aun un valor en idsubdireccion, nos retornara el valor NULL (nulo). ¿como solucionar esto?… pues……… ¿asi?
CASE WHEN (SELECT max(idsubdireccion )::numeric(4,0)+1 FROM Tablasubdireccion WHERE Iddireccion=1 GROUP BY Iddireccion) IS NULL THEN 1 ELSE(SELECT max(idsubdireccion)::numeric(4,0)+1 FROM Tablasubdireccion WHERE Iddireccion=1 GROUP BY Iddireccion) END
Que no es PHP….. pero bueno, a veces me obligan a aprender cosas que no quiero.
Gracias, tan facil y nunca me acuerdo, bien explicado GerMonti(Seleccionar comentario)