[mysql] wybieranie odpowiednich danych

0

Witam. Problem podejrzewam, że banalny, ale nie wiem jak to ugryźć. Otóż mam tabelę:

cmr_id_tok_sprawy
nr_zgloszenia  |  id_tok_sprawy
3   |	1
3   |	3
3   |	4
3   |   6
3   |	12
4   |	4
5   |	1
5   |	3
5   |	5
6   |	5
6   |	6
7   |	1
7   |	3
7   |	5
7   |	7
7   |	10
8   |	1
8   |	3
8   |	4 

I teraz, muszę wybrać takie nr_zgloszenia, które ma określone id_tok_sprawy. Przy czym id_tok_sprawy może być kilka, a wybrać należy wszystkie nr_zgloszenia, które je zawierają. Np dla id_tok_sprawy = 3 i 4 dobrym wynikiem będzie nr_zgloszenia równe 3 i 8 (muszą zawierać obie te wartości, nie tylko jedną z nich). Próbowałem tak:
SELECT nr_zgloszenia FROM cmr_id_tok_sprawy WHERE id_tok_sprawy=1 AND id_tok_sprawy=3; - wynik zerowy - niepoprawny
SELECT nr_zgloszenia FROM cmr_id_tok_sprawy WHERE id_tok_sprawy=1 OR id_tok_sprawy=3; - wynik niepoprawny
SELECT nr_zgloszenia FROM cmr_id_tok_sprawy WHERE id_tok_sprawy IN (1,3); - wynik również nie jest poprawny.

Proszę o pomoc. Z góry dzięki.

0
select nr_zgloszenia from cmr_id_tok_sprawy WHERE id_tok_sprawy IN (1,3) group by nr_zgloszenia having count(nr_zgloszenia) = 2

powinno zadziałać

0

Patrz i działa :) dzięki.

PS. Możesz wyjaśnić mi linię:
HAVING count(nr_zgloszenia) = 2
dlaczego jest =2?

0

grupujesz po nr_zgłoszenia i liczysz ile razy dany nr wystapił - jak wystąpił dwa razy to jest ok. Jakbyś chciał wybrać sprawy, które id_tok mają 3 różne to byś musiał zmienić na HAVING count(nr_zgloszenia) = 3

0

To jeszcze o coś spytam, powiedzmy, że mamy dwie takie tabele (pierwsza taka jak zaprezentowałem powyżej, druga podobna, też posiada nr_zgłoszenia, ale i id_prod). Jak chcę wybrać z jednej i drugiej tabeli te nr_zgloszenia, które mają odpowiednio zadane id_tok_sprawy i id_prod to jak to zapytanie mogłoby wyglądać... Chodzi mi głównie o to HAVING count(nr_zgloszenia) = ?... Z góry dziękuję...

0

musiał byś jakiś konkretny przykład podać

0

Ok, oto przykład. Mam dwie tabele:

cmr_id_tok_sprawy
nr_zgloszenia  |  id_tok_sprawy
3   |        1
3   |        3
3   |        4
3   |        6
3   |        12
4   |        4
5   |        1
5   |        3
5   |        5
6   |        5
6   |        6
7   |        1
7   |        3
7   |        5
7   |        7
7   |        10
8   |        1
8   |        3
8   |        4

oraz druga tabela:

cmr_id_produkty
nr_zgloszenia 	id_prod
3 	1
3 	2
4 	1
5 	1
5 	2
5 	3
5 	4
5 	5
5 	6
5 	7
5 	8
5 	9
5 	10
5 	11
5 	12
6 	1
7 	1
7 	2
8 	2 

Ok, teraz chcę stworzyć zapytanie, które wyciągnie mi takie nr_zgloszenia, które z tabeli cmr_id_tok_sprawy ma wartości (1,3 - wszystkie nie tylko jedne - musi mieć te obie) oraz z tabeli cmr_id_produkty ma wartość (np. 2,3,4 - też muszą zawierać wszystkie). Oczywiście interesuję mnie nr_zgloszenia, który spełnia te dwie zależności. Dla zadanego przykładu, prawidłowe będzie nr_zgloszenia=5. Próbowałem już z JOIN, ale jakoś mi nie wychodzi...
Dzięki

0

na oraclu działa coś takiego

SELECT a.nr_zgloszenia from
(SELECT nr_zgloszenia FROM cmr_id_tok_sprawy WHERE id_tok_sprawy IN (1,3) GROUP BY nr_zgloszenia HAVING count(nr_zgloszenia) >= 2) a,
(SELECT nr_zgloszenia FROM cmr_id_produkty WHERE id_prod IN (2,3,4) GROUP BY nr_zgloszenia HAVING count(nr_zgloszenia) >= 3) b
WHERE a.nr_zgloszenia = b.nr_zgloszenia;

ale szczerze powiedziawszy średnio mi się to zapytanie podoba :/

0

[browar] dzięki, wybrało ok, tylko w mysql musiałem przed a wstawić AS (to samo przed b). Najważniejsze, że działa. Jeszcze raz dzięki.

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