Problem z zapytaniem

Odpowiedz Nowy wątek
2018-12-09 18:17
0

Witam,
Jak napisać zapytanie które zwraca id_tematyki tej, która występuje we wszystkich książkach jakie zwraca jakieś inne podzapytanie.
Np to podzapytanie zwraca książki napisane samodzielne przez autora 2:

SELECT akk.id_ksiazki 
FROM autor_ksiazka akk
 WHERE akk.id_autora=2
AND 
          NOT EXISTS(SELECT 1 FROM autor_ksiazka akkk WHERE akkk.id_ksiazki=akk.id_ksiazki AND      akkk.id_autora!=akk.id_autora)

i chciałbym napisać zapytanie które zwróci id_tematyki które zawierają się we wszystkich ksiiążkach zwróconych przez to zapytanie.
Dodam że książka może mieć kilka tematyk.

title

edytowany 2x, ostatnio: spamgolden, 2018-12-09 18:29
Nie za bardzo wiem jak nazwać ten problem. Pierwszy raz się z nim spotykam i nie chciałbym użytkowników wprowadzać w błąd, dlatego nazwałem tak ogólnie. - spamgolden 2018-12-09 19:30

Pozostało 580 znaków

2018-12-09 22:06
0

to zapytanie można napisać prościej

SELECT ak.id_ksiazki 
FROM autor_ksiazka ak
WHERE ak.id_autora=2
group by ak.id_ksiazki
having count(ak.id_autora) = 1

a do tego tematykę można wyciągnąć na kilka sposobów

select kt.id_tematyki
from ksiazki_tematyka kt
join (SELECT ak.id_ksiazki 
FROM autor_ksiazka ak
WHERE ak.id_autora=2
group by ak.id_ksiazki
having count(ak.id_autora) = 1) k on k.id_ksiazki = kt.id_ksiazki

Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
Co do tego pierwszgeo zapytania, to w HAVING ten Count() ile miałby być, skoro przefiltrowałeś po jednej wartości we WHERE? - Marcin.Miga 2018-12-09 22:21
racja - czas iść spać - abrakadaber 2018-12-09 22:48

Pozostało 580 znaków

2018-12-09 22:23
1
SELECT ak.id_ksiazki 
FROM autor_ksiazka ak
GROUP BY ak.id_ksiazki
HAVING COUNT(distinct case when ak.id_autora=2 then ak.id_autora end) = 1 and COUNT(distinct ak.id_autora) = 1

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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