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

  • Atcom

    csendes tag

    válasz szecska_ #780 üzenetére

    Íme egy T-SQL megoldás. Sajnos nem volt elég időm rendesen kidolgozni, de remélem, hogy tudod majd használni.

    create table [hozzavalok]
    (
    [keszetel_id] [int] not null,
    [alapanyag_id] [int] not null,

    constraint [PK_hozzavalok] primary key clustered
    (
    [keszetel_id], [alapanyag_id]
    )
    )

    create table [kinek_mi_van_otthon]
    (
    [szemely_id] [int] not null,
    [alapanyag_id] [int] not null,

    constraint [PK_kinek_mi_van_otthon] primary key clustered
    (
    [szemely_id], [alapanyag_id]
    )
    )

    insert into hozzavalok
    values (1,1),
    (1,2),
    (1,3),
    (2,3),
    (2,4),
    (3,1),
    (3,5)

    insert into kinek_mi_van_otthon
    values (101,1),
    (101,2),
    (101,4),
    (102,1),
    (102,2),
    (102,3),
    (102,4),
    (102,5),
    (103,3),
    (103,4)

    select distinct
    keszetel_id, szemely_id
    from
    -- Minden készételhez egy személy hozzárendelése
    hozzavalok, (select distinct szemely_id from kinek_mi_van_otthon) sz
    where -- Csak azok a személyek kellenek, akiknél minden megvan
    not exists (
    -- Azon személyek halmaza, akiknek valamelyik készétel alapanyagából hiánya van
    select
    *
    from
    (select
    keszetel_id, alapanyag_id, szemely_id
    from
    -- Minden készétel alapanyaghoz egy személy hozzárendelése
    hozzavalok, (select distinct szemely_id from kinek_mi_van_otthon) sz) hv
    left outer join kinek_mi_van_otthon on kinek_mi_van_otthon.alapanyag_id = hv.alapanyag_id
    and kinek_mi_van_otthon.szemely_id = hv.szemely_id
    where
    kinek_mi_van_otthon. szemely_id is null -- Azon személyek kellenek, akiknél valamiből hiány van
    -- az adott készételnél
    and hv.keszetel_id = hozzavalok.keszetel_id
    and hv.szemely_id = sz.szemely_id
    )
    order by
    hozzavalok.keszetel_id, sz.szemely_id


    drop table hozzavalok
    drop table kinek_mi_van_otthon

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