Ho una tabella comeCome ricalcolare un campo in GROUP
f1|f2|fk
1 | 0|100
1 | 1|200
1 | 2|300
1 | 3|400
2 | 0|300
2 | 1|400
2 | 2|500
Dove (f1,f2)
è il PK e FK è una chiave esterna. Non ci sono molti valori per fk, circa 20. f2 non è mai più di 3. Ci sono molte coppie (f1,f2)
, tuttavia. (f1,fk)
è UNIQUE
.
Ora, diciamo che stiamo mappando da 100 e da 200 a A, da 300 a da 400 a B, da 500 a C: questa mappatura è un dato. Vorremmo (f1_new,fk_mapped)
rimanere UNIQUE
. Questo è finora risolto approssimativamente da
INSERT INTO mapped (f1_new,f2_new,fk_new)
SELECT f1, MIN(f2), CASE fk WHEN 100 THEN A WHEN 200 THEN A END AS fk
FROM origin
GROUP BY f1, fk
Ora, il problema è che occorre mantenere valori f2 0, 1, 2 della tabella mappata, quindi questo è il risultato desiderato:
f1_new|f2_new|fk_mapped
1 | 0 |A
1 | 1 |B
2 | 0 |B
2 | 1 |C
Mi piacerebbe davvero mantenerlo in MySQL.
Sono confuso - Tu dici che vuoi tenere tutti e tre i valori di 'f2' nella tabella mappata, ma il risultato desiderato si show non ha istanze dove 'f2 == 2'? – Air
Vuole assegnare nuovi valori di 'f2', quindi vengono mantenuti nell'ordinazione 0, 1, 2, ... per un particolare valore di' f1'. È una colonna per rango per-f1. – Barmar
Ah. Fatto. Immagino che la quarta riga nella prima tabella di esempio dovrebbe avere 'f2 == 3', quindi. Soprattutto se '(f1, f2)' è la chiave primaria. – Air