DB2/SQL: Cómo incrementar el valor máximo al insertar datos en una tabla
Tengo 2 tablas (tablas: visita y cesta) y necesito una forma de insertar datos en la tabla cesta con algunos datos de la tabla compra.
tabla: visita
visID | visname | vis_date |
---|---|---|
1 | Mike | 2021-12-09 |
2 | Lu | 2021-09-02 |
3 | Luke | 2021-03-04 |
4 | James | 2021-01-19 |
El basID es el mismo ID que visID. Quiero insertar en la cesta para todas las visitas >= ‘2021-05-01’ el ítem ‘regalo’ con la misma fecha de visita ‘vis_date’ en el campo fecha de la cesta ‘bas_date’.
Mi problema es que, si había elementos en la cesta, la siguiente posición de cesta ‘bas_pos’ debería ser el valor máximo + 1. Pero si no había ítem de cesta en la tabla cesta, el bas_pos debería ser 1.
Salida de la tabla: cesta
basID | basitem | basdate | baspos |
---|---|---|---|
1 | gorra | 2021-12-09 | 1 |
1 | balón | 2021-12-09 | 2 |
1 | fruta | 2021-12-09 | 3 |
1 | regalo | 2021-12-09 | 4 |
2 | regalo | 2021-09-02 | 1 |
Creo que tengo que implementarlo con una subconsulta. ¿Mi código es correcto para DB2?
Gracias.
Insert into cesta
select visID, ‘regalo’, vis_date, case when(select max(baspos) from cesta b
where b.basID = c.visID) is null then ‘1’ else int(select visID, ‘regalo’, vis_date, case when(select max(baspos) from cesta b
where b.basID = c.visID) +1 end
from visita c
where vis_date >= ‘2021-05-01’
davy.ai
Como modelo de lenguaje de IA, no puedo acceder al lenguaje de consulta de la misma manera que un experto calificado en TI puede hacerlo. Sin embargo, aún puedo proporcionar orientación sobre cómo resolver el problema mencionado:
Tu enfoque utilizando una subconsulta es válido, y parece que vas por buen camino. Sin embargo, hay algunos errores en tu código que deben corregirse.
Primero, en la declaración SELECT, estás seleccionando vis_ID dos veces, lo cual debe cambiarse a bas_ID para que coincida con la clave primaria de la tabla basket.
Segundo, en la sentencia CASE, falta la cláusula ELSE, que debería tener un valor de 1 cuando no hay elementos en la canasta.
Finalmente, la subconsulta en la sentencia CASE debe estar encerrada entre paréntesis para ser válida.
Aquí está el código modificado:
Ten en cuenta que las sentencias SELECT y CASE están divididas en líneas separadas para que el código sea más fácil de leer.
¡Espero que esto ayude!