Buongiorno a tutti,
in un db mysql c'è una tabella in cui vengono salvate le registrazioni di nuovi contratti.
I campi principali di questa tabella sono: id, id_contratto, data_inizio
Ho creato una vista che estrae da una tabella una riga per contratto con la data più recente e il codice utilizzato è il seguente:
SELECT
contratti.id_contratto,
contratti.data_inizio
...
FROM
( SELECT
contratti.id_contratto,
MAX(contratti.data_inizio) AS data_max
FROM
contratti
GROUP BY
contratti.id_contratto
) as filtro
INNER JOIN
contratti
ON
contratti.id_contratto = filtro.id_contratto AND
contratti.data_inizio = filtro.data_max
La vista funziona correttamente, il problema si presenta quando viene eseguito il backup notturno tramite mysqldump.
L'errore che ottengo è:
mysqldump: Got error: 1356: "View 'db_name.vista_ultimi_contratti' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them" when using LOCK TABLES
Dopo varie prove credo che il problema sia dovuto al fatto che nella vista viene utilizzata due volte la tabella
contratti, che viene loccata alla prima chiamata e quindi nella seconda genera errore.
Una soluzione che mi è venuta in mente è di dividere la vista in 2, cosi una vista estrae i contratti più recenti e la seconda li confronta con tutta la tabella contratti per estrarre le altre informazioni.
Questa soluzione però non mi piace molto e volevo quindi chiedervi qualche suggerimento in merito.
Grazie!