Skrzynki bez itemów

0

Witam,
po kilku godzinach chwilowo zawieszonej walki z SQLem zwracam się do Was forumowicze o pomoc.

title
title

Z tych oto tabelek wynika, że:
Case o ID 1 zawiera itemy o ID: 1,2,3
Case o ID 2 zawiera itemy o ID: 1
Case o ID 3 zawiera itemy o ID: 1,3

Nie mam pojęcia jak skonstruować polecenie, które dla danego ID_case wyświetli mi tylko te itemy, które nie są do niej przypisane

Case o ID 1 nie powinien wyświetlić żadnego ID_itemu
Case o ID 2 powinien wyświetlić ID: 2,3
Case o ID 3 powinien wyświetlić ID: 2

Jest mi to bardzo potrzebne a mimo prób i nawet bezsensownego strzelania nie uzyskałem porządanego rezultatu.
Z góry dziękuję za pomoc i pozdrawiam.

0

Poczytaj o joinach (złączeniach).

0

title
title

EDIT: dobre linki do zdjęć

0

Czytałem o LEFT, INNER, RIGHT JOIN'ach, ale nadal nie jestem w stanie sobie z tym poradzić

0

Pokaż jak próbowałeś tu zastosować left joina.

1

nie podałes nazw tabel..

Jeżeli intersuje cię konkretny case to można bez joina:

select
    *
from
     items
where
    id_item not in (select id_item from CaseItems where id_case=2)

Oczywiście można joinem i to lepiej bo negacja nie jest optymalizowna:

select
    items.*
from
    items
    left join CaseItems on CaseItems.id_item=items.id_item and caseitems.id_case =2
where
    caseitems.id_item is null

Jeżeli jednak chcemy pobrać wszytkie itemy nie przypisane do case to najprościej porównać się do wzorca, zakładam, ze masz w bazie table case i tu z pomocą przyjdzie cross join, czyli każdy rekord z tabeli case połączymy z każdym rekordem w tabeli items:
Zakładając, że w tabeli case masz trzy rekordy o id_case 1,2,3

to zapytanie

select
    case.id_case
    ,items.id_item
from
    case
    inner join items on 1=1

zwróci nam wzorzec danych

1,1
1,2
1,3
2,1
2,2
2,3
3,1
3,2
3,3

No to teraz przefiltrujmy wzorzec do niepasujących:

select
	mi.*
from (select
			case.id_case
			,items.id_item
		from
			case
			inner join items on 1=1
		) as wzorzec
	left join CaseItems as ci on ci.id_item=wzorzec.id_item and ci.id_case=wzorzec.id_case
where
    ci.id_case is null
0

Dzięki wielkie, wszystko działa tak jak powinno!

1 użytkowników online, w tym zalogowanych: 0, gości: 1