Martio
5.10.2006, 11:25:45
Tablica "ogloszenie"
Kolumny: ogl_id
Wiersze:
1
2
3
4
5
Tablica "ogloszenie_opis"
Kolumny: ogl_id, opi_id
Wiersze:
1, 1
1, 2
1, 3
1, 4
1, 5
2, 1
3, 1
4, 3
5, 2
5, 3
5, 4
Tablica "ogloszenie_wyposazenie"
Kolumny: ogl_id, wyp_id
1, 1
1, 2
1, 3
2, 1
3, 1
4, 1
5, 1
Pytanie: jak pobrac z bazy danych ID ogloszenia (tabela: "ogloszenie", pole "ogl_id") przy tym, że "opi_id" tabeli "ogloszenie_opis" musi wynosić 1 i 2 i 3 oraz "wyp_id" 1 i 2?
Odpowiedź powinna być taka, że zwraca mi ID ogłoszenia = 1, gdyż tylko ogłoszenie ID 1 spełnia ten warunek (posiada wyp_id: 1, 2, 3 oraz opi_id: 1, 2).
Proszę o pomoc przy skonstruowaniu zapytania SQL. Może trochę namieszałem, ale również tak zamieszane jest to SQL.
Skobi
5.10.2006, 11:53:27
na szybko to chyba powinno byc tak:
SELECT
DISTINCT o.*
FROM ogloszenie o LEFT OUTER JOIN ogloszenie_opis oo ON o.ogl_id = oo.ogl_id
LEFT OUTER JOIN ogloszenie_wyposazenie ow ON o.ogl_id = ow.ogl_id
WHERE oo.opi_id IN ( 1, 2 ) AND ow.wyp_id IN ( 1, 2, 3 )
Martio
6.10.2006, 08:44:14
Dziękuję. Jednak użycie operatora IN spowoduje, że zostaną pobrane wszystkie rekordy, które posiadają 1 LUB 2, a ja chciałbym wybrać wszystkie, które posiadają 1 ORAZ 2.
oo.opi_id in ( 1, 2 )
Próbuje tak:
oo.opi_id = 1 AND oo.opi_id = 2, ale to nie działa
dr_bonzo
6.10.2006, 09:24:12
oo.opi_id = 1 AND oo.opi_id = 2, ale TO nie działa
No i nie bedzie dzialac bo jak "1" moze byc jednoczesnie "1" i "2"?
Cytat
Odpowiedź powinna być taka, że zwraca mi ID ogłoszenia = 1, gdyż tylko ogłoszenie ID 1 spełnia ten warunek (posiada wyp_id: 1, 2, 3 oraz opi_id: 1, 2).
Hmm musisz polaczyc EXISTS (istnieja rekordy z wyp_id...) i ALL.
Zreszta zaraz sprawdze.