Mam tabeli jakJak przeliczyć na pole GRUPY
f1|f2|fk
1 | 0|100
1 | 1|200
1 | 2|300
1 | 3|400
2 | 0|300
2 | 1|400
2 | 2|500
Gdzie (f1,f2)
jest PK i FK jest kluczem obcym. Nie ma zbyt wielu wartości dla fk, około 20. f2 nigdy nie jest większe niż 3. Istnieje jednak wiele par (f1,f2)
. (f1,fk)
to UNIQUE
.
Teraz powiedzmy, że mapujemy 100 i 200 na A, 300 i 400 na B, 500 na C - to odwzorowanie jest podane. Chcielibyśmy, aby (f1_new,fk_mapped)
pozostało UNIQUE
. Jest to jak dotąd rozwiązany grubsza przez
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
Teraz problemem jest to, że musimy zachować wartości f2 0, 1, 2 w odwzorowanym tabeli, więc jest to pożądany rezultat:
f1_new|f2_new|fk_mapped
1 | 0 |A
1 | 1 |B
2 | 0 |B
2 | 1 |C
Naprawdę chciałbym zachować to w MySQL.
Jestem zdezorientowany - mówisz, że chcesz, aby wszystkie trzy wartości 'f2' w odwzorowanym stole, ale pożądany rezultat ty show nie ma przykładów gdzie 'f2 == 2'? – Air
Chce przypisać nowe wartości 'f2', więc są przechowywane w 0, 1, 2, ... porządkując określoną wartość' f1'. Jest to kolumna na jeden stopień f1. – Barmar
Ah. Rozumiem. Zgaduję, że czwarty wiersz w pierwszej przykładowej tabeli powinien mieć "f2 == 3", wtedy. Zwłaszcza jeśli '(f1, f2)' jest kluczem podstawowym. – Air