Zapytanie z tabelą pośrednią

0

W uproszczeniu moja cząstka bazy wygląda tak. Tabela zawierająca przychodnie, tabela zawierająca badania i tabela przejściowa mająca id dwóch poprzednich i pole "cena". To pole mówi jaka jest cena konkretnego badania w konkretnej przychodni.
Tu jest link do obrazka ze schematem:
http://lancerx.republika.pl/images/diag.png
Chcę wybrać takie przychodnie w których można zrobić wszystkie z wymienionych badań. Dostaję listę id badań np. 2 i 3 i chcę teraz otrzymać takie przychodnie w których można zrobić jednocześnie badanie 2 i 3.
Użycie IN:
select przych_id from PrzychBad where bad_id IN (2, 3)
daje zły skutek bo wyświetlają się przychodnie w których jest wykonywane badanie 2 LUB badanie 3.
Nagłówkowałem się nad tym masę czasu i nie mam pojęcia jak to ugryźć. Próbowałem JOINów ale z marnym skutkiem (może źle ich używałem).
Napisanie:
select przych_id from PrzychBad where bad_id = 2 OR bad_id = 3
przynosi taki sam skutek jak zastosowanie IN.
Napisanie
select przych_id from PrzychBad where bad_id = 2 AND bad_id = 3
wiadomo, takich danych nie ma...

Bardzo proszę o pomoc.

0

jeżeli tylko dla dwóch:
select przych_id from PrzychBad pb1, PrzychBad pb2 where pb1.id=pb2.id and pb1.badania=2 and pb2.badanie=3

problem będzie, jeżeli ta lista badan będzie zmienna 2,3.. 10 badan.
Wtedy proponuje pokombinować z group by

select przych_id from PrzychBad
where badanie in(..)
group by przych_id
having count(badanie_id)=(ilość badań)

0

zapytanie zwroci wszystkie przychodznie (rekordy z tabeli Przychodnia), w ktorych mozna zrobic wszystkie podane badania
potrzebujesz liste badan (ich id) oraz liczbe badan
nie wiem jak je przekazujesz, ale cos takiego powinno zadzialac
jesli nie to pisz, bo lecialem z glowy :)

select P.* from
(
select przych_id, count(*) as LBad from
(select * from Badanie where id in (/lista id badan/2,4,5,6,7,8)) as B
inner join PrzychBad PB on B.id = PB.bad_id
group by PB.przych_id
) as T
inner join Przychodnia P on T.przych_id = P.id
where T.LBad = LiczbaBadanDoSprawdzenia /nie wiem jak je przekazujesz, ale ta liczba musi byc zgodna z iloscia id'kow w in (...)/

0
select * from Badanie where id in (/*lista id badan*/2,4,5,6,7,8)) as B
inner join PrzychBad PB on B.id = PB.bad_id
group by PB.przych_id

to pójdzie? :) w zapytaniach grupujących chyba musisz wszystko co w select dajesz wylistować po group by, albo dać w funkcjach agregujących avg, sum, count itp
jeśli już, to chyba tam powinno być : select PB.przych_id from Badanie

0

o jejku slepoto ! :P

nie widzisz ze ten select * to podzapytanie as B, ktore jest joinowane z PrzychBad grupowane i agregacja jest tu: select przych_id, count(*) as LBad from

ale generalnie teoria jest taka jak napisales, wiec ogolnie 3+

0

a racja ;)

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