webForumDet fria alternativet

Poster som matchar alla kriterier?

Databaser & SQLur Databashanterare & SQL

3 svar · 524 visningar · startad av Travoni

Medlem sedan okt. 20041 556 inlägg
Frågan#1

Hej,
har tre tabeller

[B]Teater[/B]
----------
[I]uid   namn[/I]
1     Operan
2     Dramaten
3     Folkan

[B]Faciliteter[/B]
----------
[I]fid   namn[/I]
1     Bar
2     Bevakad garderob
4     Handikappanpassad Toalett

[B]TeaterFaciliteter[/B]
-------------------
[I]uid    fid[/I]
1       1
1       2
1       3
2       1
3       2

Nu skulle jag vilja få ut den teater som har alla faciliteter jag väljer.
ex. (1,2,3) och i detta fall endast få fram "Operan" i resultatet.

Hur gör jag det?

Medlem sedan juni 20008 205 inlägg
#2

Typ

select * from Teater t where (
    select count(*) from TeaterFaciliteter tf where tf.uid = t.uid and tf.fid in ([I]listan av valda facilitets-id:n[/I])
) = [I]antalet valda facilitets-id:n[/I]

-- vilket i ditt exempel blir

select * from Teater t where (
    select count(*) from TeaterFaciliteter tf where tf.uid = t.uid and tf.fid in (1, 2, 3)
) = 3
Medlem sedan okt. 20041 556 inlägg
#3

Nix, det funkar inte, detta; tf.fid in (1, 2, 3) ger fler Teatrar än tf.fid in (1) vilket är "fel".
Alltså alla teatrar med facilitet 1,2,3 verkar hämtas.

Medlem sedan okt. 20041 556 inlägg
#4

Tack,
Oki, missade visst ") = 3", då blir det något annat, skall kolla igen.
Funkar jättebra, tack!.

131 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)