Zapytane SQL Porównanie wymaganych kwalifikacji użytkowników z kwalifikacjami do wykonywania pracy

0

Witajcie, mam problem z zapytaniem niby prostym ale jednak nie mogę sobie z nim poradzić.
Opis Problemu:

  • Aby user mógł wykonywać daną pracę musi posiadać odpowiednie kwalifikacje.
    np. żeby być policjantem trzeba być:
  • nie karanym
    -mieć zezwolenie na broń

Aby być Kucharzem trzeba umieć gotować oraz mieć badania sanitarne.

generalie aby zostać kimś tam trzeba spełnić wszystkie wymagania.

Struktura systemu jest taka:

Użytkownik est sprawdzany przez administratora.
Wprowadzane są jego kwalifikacje (tabela users_qualifications)
Dany użytkownik należy do określonej firmy (company w tabeli users)

w tabeli works mamy stanowiska pracy.

W tabeli works_qualifications mamy id danej pracy oraz wymagane kwalifikacje niezbędne do pełnienia danej pracy
(generalie może być n wymagań dotyczących danego stanowiska pracy)
w tabeli qualifications mamy kwalifikacje w naszym systemie ( czyli , nie karalosc , pozwolenie na broń , badania sanitarne, karta ratownika itd)

Problem jest następujący:

Podaję id firmy.
i muszę dostać wszystkie prace (works) które mogą być wykonywane przez ludzi z danej firmy.

i tu ważne. Jeśli dana firma ma dwóch pracowników
Jeden ma pozwolenie na broń ale jest karany (nie ma zaznaczone nie karalość)
a drugi jest nie karany ale nie ma pozwolenia na broń to wiadomo że z dwóch pracowników jednego policjanta nie będzie:)

Czyli aby w danej firmie możliwe było stanowisko Policjant musi się znaleŹć osoba (robocop)
która ma pozwolenie na broń i jest nie karana.

ogólnie na dane stanowisko może być n kwalifikacji niezbędnych do pełnienia danej pracy.

--
-- Database: `testowa`
--

-- --------------------------------------------------------

--
-- Struktura tabeli dla tabeli `qualifications`
--

CREATE TABLE IF NOT EXISTS `qualifications` (
  `qualification_id` int(11) NOT NULL AUTO_INCREMENT,
  `qualification_name` varchar(255) NOT NULL,
  PRIMARY KEY (`qualification_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

--
-- Zrzut danych tabeli `qualifications`
--

INSERT INTO `qualifications` (`qualification_id`, `qualification_name`) VALUES
(1, 'Zezwolenie na bron'),
(2, 'Niekaralnosc'),
(3, 'Gotowanie'),
(4, 'Badania sanitarne');

-- --------------------------------------------------------

--
-- Struktura tabeli dla tabeli `users`
--

CREATE TABLE IF NOT EXISTS `users` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(50) NOT NULL,
  `user_company` int(11) NOT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

--
-- Zrzut danych tabeli `users`
--

INSERT INTO `users` (`user_id`, `user_name`, `user_company`) VALUES
(1, 'John Smith', 2),
(2, 'Sara Parker', 2),
(4, 'Andriej Xanow', 3),
(5, 'Robocop', 2);

-- --------------------------------------------------------

--
-- Struktura tabeli dla tabeli `users_qualifications`
--

CREATE TABLE IF NOT EXISTS `users_qualifications` (
  `user_id` int(11) NOT NULL,
  `qualification_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Zrzut danych tabeli `users_qualifications`
--

INSERT INTO `users_qualifications` (`user_id`, `qualification_id`) VALUES
(1, 1),
(2, 1),
(3, 1),
(3, 2),
(4, 1),
(4, 2),
(5, 1),
(5, 2);

-- --------------------------------------------------------

--
-- Struktura tabeli dla tabeli `works`
--

CREATE TABLE IF NOT EXISTS `works` (
  `work_id` int(11) NOT NULL AUTO_INCREMENT,
  `work_name` varchar(255) NOT NULL,
  PRIMARY KEY (`work_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Zrzut danych tabeli `works`
--

INSERT INTO `works` (`work_id`, `work_name`) VALUES
(1, 'Policjant'),
(2, 'Kucharz');

-- --------------------------------------------------------

--
-- Struktura tabeli dla tabeli `works_qualifications`
--

CREATE TABLE IF NOT EXISTS `works_qualifications` (
  `work_id` int(11) NOT NULL,
  `qualification_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Zrzut danych tabeli `works_qualifications`
--

INSERT INTO `works_qualifications` (`work_id`, `qualification_id`) VALUES
(1, 1),
(1, 2),
(2, 3),
(2, 4);

Dzisiaj straciłem pół dnia pisząc rózne warianty zapytań ale jakoś nie udało mi się napisać odpowiedniego. 
Proszę o podpowiedź jak coś takiego zorganizować. *zapytanie było z innymi tabelami jescze ale nie sa istotne w problemie a wiec ich nie umiszczam aby nie zaciemniac problemu.
0
select x.user_id, x.work_id from (
select wq.work_id, uq.user_id, count(distinct uq.qualification_id) ilosc from works_qualifications wq  JOIN users_qualifications uq on wq.qualification_id=uq.qualification_id group by 1,2
) x
join 
(select wq.work_id, count(distinct wq.qualification_id) ilosc from works_qualifications wq group by 1)
y on x.work_id=y.work_id AND x.ilosc=y.ilosc

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