Hirdetés

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

  • Apollo17hu

    őstag

    Sziasztok!

    Van egy problémám, amire csak favágó megoldásom van, de érdekelne, hogy megoldható-e elegáns(abb)an.

    Van egy tény tábla (t1), ami tartalmaz egy egyedi azonosítót (id), és további attribútum mezőket (m1, m2, m3 stb.).
    Van egy dimenzió tábla (t2), ami a tény tábla rekordjainak besorolására szolgál. Ebben a dimenzió táblában megvan az összes attribútum mező (m1, m2, m3 stb.), ami t1-ben is szerepel, de itt id helyett egy ún. kategoria mező van. A kategoria mező szintén egyedi. Úgy áll elő, hogy a rekordon lévő attribútum mezőket egyszerűen konkatenáljuk.

    A feladat az, hogy t1 összes sorát meg kell nézni, hova kategorizálódik t2 szerint. A probléma ott kezdődik, hogy az attribútum mezők mindkét táblában hol töltöttek, hol nem (NULL). Értelemszerűen, ha t2-ben töltetlen egy attribútum, akkor az a kategorizálás szempontjából irreleváns (vagyis t1-ben bármit tartalmaz az attribútum, a rekord kötni fog t2-vel). ...és ott folytatódik, hogyha t2-ben bizonyos sorok "tartalmazzák" a másikat, akkor a szűkebb halmaz priorizált.

    Például, ha az alábbi két rekord szerepel t2-ben:

    m1 = NULL; m2 = 'Bela'; kategoria = Bela
    m1 = 'Aladar'; m2 = 'Bela'; kategoria = AladarBela

    ...akkor t1-ben az alábbi rekord:

    id = 1; m1 = 'Aladar'; m2 = 'Bela'

    az 'AladarBela' kategóriát fogja megkapni, mert ugyan 'Bela' kategória is érvényes lenne rá, de 'AladarBela' szűkebb halmazt képvisel (mert nem mindegy, mi kerül az m1 attribútumba).

    Ha t1-ben ez a rekord lenne:

    id = 2; m1 = 'Alfonz'; m2 = 'Bela'

    ...akkor a 'Bela' kategóriát kapná.

    Látszik, hogy a kategorizálás egyértelmű, de nekem nem jut eszembe egyszerűbb megoldás annál, minthogy létrehozzak egy olyan CASE WHEN-t, aminek az ágainak számossága egyezik a t2 táblában lévő rekordok számosságával. És ez azért is gáz így, mert ha t2 bővül/módosul, akkor a CASE WHEN-t is bővíteni/módosítani kell.

    DB Fiddle-ben készítettem két mintatáblát, ha vkit érdekel a problémafelvetés. ;) Köszi!

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