Hirdetés

Új hozzászólás Aktív témák

  • nyunyu

    félisten

    válasz Taci #5317 üzenetére

    Ja, hogy egységesíteni akarod a cikk_kategoria összerendeléseket?

    Akkor
    1) öntsd bele egy közös táblába az összes eddigi kategórianevedet (legyen kategoria_uj a példa kedvéért)

    2) csinálj egy cikk_kategoria_uj táblát, amiben már nincs kategoria_verzio oszlop, többi ugyanaz, mint az eddigi cikk_kategoria-nal.

    3) töltsd fel tömegesen a cikk_kategoria_uj táblát:
    merge into cikk_kategoria_uj i
    using (
    select a.cikk_id,
    a.cim,
    a.kategoria_nev
    a.kategoria_verzio,
    a.kategoria_id kategoria_id_regi
    k.kategoria_id kategoria_id_uj
    from (
    select c.id cikk_id,
    c.cim,
    ck.kategoria_id,
    ck.kategoria_verzio,
    case
    when ck.kategoria_verzio = 1 then k1.nev
    when ck.kategoria_verzio = 2 then k2.nev
    when ck.kategoria_verzio = 3 then k3.nev
    end kategoria_nev
    from cikkek c
    join cikk_kategoria ck
    on ck.cikk_id = c.id
    left join kategoria_v1 k1
    on k1.id = ck.kategoria_id
    left join kategoria_v2 k2
    on k2.id = ck.kategoria_id
    left join kategoria_v3 k3
    on k3.id = ck.kategoria_id) a
    join kategoria_uj k
    on k.kategoria_nev = a.kategoria_nev) x
    on (i.cikk_id = x.cikk_id and i.kategoria_id = x.kategoria_id_uj)
    when not matched
    then insert (cikk_id, kategoria_id)
    values (x.cikk_id, x.kategoria_id_uj);

    4) ELLENŐRIZD az új táblákat:
    select c.id,
    c.cim,
    ck.kategoria_id,
    case
    when ck.kategoria_verzio = 1 then k1.nev
    when ck.kategoria_verzio = 2 then k2.nev
    when ck.kategoria_verzio = 3 then k3.nev
    end kategoria_nev
    from cikkek c
    join cikk_kategoria ck
    on ck.cikk_id = c.id
    left join kategoria_v1 k1
    on k1.id = ck.kategoria_id
    left join kategoria_v2 k2
    on k2.id = ck.kategoria_id
    left join kategoria_v3 k3
    on k3.id = ck.kategoria_id;

    vs
    select c.cid,
    c.cim,
    ck.kategoria_id,
    k.nev kategoria_nev
    from cikkek c
    join cikk_kategoria_uj ck
    on ck.cikk_id = c.id
    join kategoria_uj k
    on k.id = ck.kategoria_id;

    5) ha egyeznek, akkor átnevezed a régi táblákat valami másra.
    ha nem, akkor átgondolod, mit szúrtál el/mi maradt ki.

    6) új táblákat átrakod a régiek helyére:
    rename cikk_kategoria_uj to cikk_kategoria;
    rename kategoria_uj to kategoria;

    7) ha már mindent 3x ellenőriztél, akkor eldobhatod az 5)-nél átnevezett táblákat.

    8) itt jön az előző hozzászólásom.

    NAGYON bátrak már az 5) pontnál tolhatják drop table-t.
    Aztán utólag ne panaszkodjanak, hogy DDLre nincs undo.

Új hozzászólás Aktív témák