Hirdetés

Keresés

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

  • nyunyu

    félisten

    válasz Pürrhosz #5639 üzenetére

    Ha jól értem, akkor neked inkább egy új, AB tábla (a_index, b_index) kéne, az kapcsolná össze az A táblában leírt objektumokat, és a B táblában leírt tulajdonságaikat.
    Így tetszőleges N:M kapcsolatot le tudnál írni: egy A-hoz több B tulajdonság is tartozhatna (pl. alma lehet piros, zöld és sárga is), és B tulajdonság tartozhatna több A objektumhoz is. (alma és citrom is sárga).

    Kapcsoló tábla létrehozása A-ra, B-re mutató külső kulcsokkal:
    CREATE TABLE AB (
    A_index INTEGER FOREIGN KEY REFERENCES A(A_index),
    B_index INTEGER FOREIGN KEY REFERENCES B(B_index)
    );

    Törölni az AB táblából bármikor tudsz, viszont a külső kulcsok miatt sem az A-ból, sem a B-ből nem fogsz tudni olyan értéket törölni, amire az AB hivatkozik!

    Feltöltése a meglévő B táblából:
    INSERT INTO AB (A_index, B_index)
    SELECT A_index, B_index
    FROM B;

    (B táblában ezután már felesleges az A_index mező, el lehet dobni:
    ALTER TABLE B DROP COLUMN A_index;
    Helyette mindig az AB táblát kell majd joinolni.)

    Új kombó, pl. zöld alma beszúrása (ha már külön-külön létezik az alma és a zöld is):
    INSERT INTO AB (A_index, B_index)
    SELECT A.A_index, B.B_index
    FROM A
    JOIN B
    ON 1=1
    WHERE A.A_name = 'Alma'
    AND B.B_name = 'Zöld';

    Milyen színű répa van?
    SELECT B.B_name
    FROM A
    JOIN AB
    ON AB.A_index = A.A_index
    JOIN B
    ON B.B_index = AB.B_index
    WHERE A.A_name = 'Répa';

    Melyik gyümölcs sárga?
    SELECT A.A_name
    FROM B
    JOIN AB
    ON AB.B_index = B.B_index
    JOIN A
    ON A.A_index = AB.A_index
    WHERE B.B_name = 'Sárga';

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