Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Adrian - 23-11-2005 11:04 Problem z zapytanie,
Witam,
Mam 2 tabele: 1. tabela z elementami item_id primary autoincrement int (... pozostale pola niewazne)
2. przypisanie wyposażeń do elementów item_id int eq_id int
Chciałbym wyciągnąć wszystkie elementy z tabeli nr 1 takie, że posiadają np wyposazenie nr 1,2,4...
Próbowałem to zrobić tak: select item_id from tab2 where eq_id in (1,2,4) ale takie rozwiązanie okazuje się błędne, gdyż pobiera wszystkie elementy które mają przynajmniej jedno z tych wyposażeń, a mi są potrzebne te które posiadają przynajmniej te wyposażenia które podaje (w tym przypadku 1,2,4, ale mogą mieć np też więcej 1,2,4,8...).
Czy jest mi wstanie ktoś pomóc? Używam MySQL 4.0, bez podzapytań. Z góry dziękuje za odpowiedź.
> Próbowałem to zrobić tak: > select item_id from tab2 where eq_id in (1,2,4) > ale takie rozwiązanie okazuje się błędne, gdyż pobiera wszystkie > elementy które mają przynajmniej jedno z tych wyposażeń, a mi są > potrzebne te które posiadają przynajmniej te wyposażenia które podaje > (w tym przypadku 1,2,4, ale mogą mieć np też więcej 1,2,4,8...).
> Witam, > > Mam 2 tabele: > 1. tabela z elementami > item_id primary autoincrement int > (... pozostale pola niewazne) > > 2. przypisanie wyposażeń do elementów > item_id int > eq_id int > > > Chciałbym wyciągnąć wszystkie elementy z tabeli nr 1 takie, że posiadają np > wyposazenie nr 1,2,4... > > Próbowałem to zrobić tak: > select item_id from tab2 where eq_id in (1,2,4) > ale takie rozwiązanie okazuje się błędne, gdyż pobiera wszystkie elementy które > mają przynajmniej jedno z tych wyposażeń, a mi są potrzebne te które posiadają > przynajmniej te wyposażenia które podaje (w tym przypadku 1,2,4, ale mogą mieć > np też więcej 1,2,4,8...). > > Czy jest mi wstanie ktoś pomóc? Używam MySQL 4.0, bez podzapytań. Z góry > dziękuje za odpowiedź. > > -- > Pozdrawiam Adrian > > -- > Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Jeśli obie tabele mają powiązanie (np. id) to najprościej będzie napisać select : select item_id,eq_id from tabela1,tabela2 where tabela1.id=tabela2.id and eq_id in (1,2,4)
> > Witam, > > > > Mam 2 tabele: > > 1. tabela z elementami > > item_id primary autoincrement int > > (... pozostale pola niewazne) > > > > 2. przypisanie wyposażeń do elementów > > item_id int > > eq_id int > > > > > > Chciałbym wyciągnąć wszystkie elementy z tabeli nr 1 takie, że posiadają np > > wyposazenie nr 1,2,4... > > > > Próbowałem to zrobić tak: > > select item_id from tab2 where eq_id in (1,2,4) > > ale takie rozwiązanie okazuje się błędne, gdyż pobiera wszystkie elementy > które > > mają przynajmniej jedno z tych wyposażeń, a mi są potrzebne te które posiadają > > przynajmniej te wyposażenia które podaje (w tym przypadku 1,2,4, ale mogą mieć > > np też więcej 1,2,4,8...). > > > > Czy jest mi wstanie ktoś pomóc? Używam MySQL 4.0, bez podzapytań. Z góry > > dziękuje za odpowiedź. > > > > -- > > Pozdrawiam Adrian > > > > -- > > Wysłano z serwisu OnetNiusy: http://niusy.onet.pl > > Jeśli obie tabele mają powiązanie (np. id) to najprościej będzie napisać * > select : > select item_id,eq_id > from tabela1,tabela2 where tabela1.id=tabela2.id and eq_id in (1,2,4)
No niestety takie rozwiązanie odpada, gdyż in, działa tak samo jak wiele razy wywołane or, a to daje niestety nieporządany efekt, w stylu, że wybiera elementy, które posiadają nawet tylko jedno z podanych eq_id....
pastuszek@gmail.com napisał(a): >>>Witam, >>> >>>Mam 2 tabele: >>>1. tabela z elementami >>>item_id primary autoincrement int >>>(... pozostale pola niewazne) >>> >>>2. przypisanie wyposażeń do elementów >>>item_id int >>>eq_id int >>> >>> >>>Chciałbym wyciągnąć wszystkie elementy z tabeli nr 1 takie, że posiadają np >>>wyposazenie nr 1,2,4... >>> >>>Próbowałem to zrobić tak: >>>select item_id from tab2 where eq_id in (1,2,4) >>>ale takie rozwiązanie okazuje się błędne, gdyż pobiera wszystkie elementy >> >>które >> >>>mają przynajmniej jedno z tych wyposażeń, a mi są potrzebne te które > > posiadają > >>>przynajmniej te wyposażenia które podaje (w tym przypadku 1,2,4, ale mogą > > mieć > >>>np też więcej 1,2,4,8...). >>> >>>Czy jest mi wstanie ktoś pomóc? Używam MySQL 4.0, bez podzapytań. Z góry >>>dziękuje za odpowiedź. >>> >>>-- >>>Pozdrawiam Adrian >>> >>>-- >>>Wysłano z serwisu OnetNiusy: http://niusy.onet.pl >> >>Jeśli obie tabele mają powiązanie (np. id) to najprościej będzie napisać >>select : >> select item_id,eq_id >>from tabela1,tabela2 where tabela1.id=tabela2.id and eq_id in (1,2,4) > > > No niestety takie rozwiązanie odpada, gdyż in, działa tak samo jak wiele razy > wywołane or, a to daje niestety nieporządany efekt, w stylu, że wybiera > elementy, które posiadają nawet tylko jedno z podanych eq_id.... > > >> >>-- >>Wysłano z serwisu OnetNiusy: http://niusy.onet.pl > > >
no to spróbuj jakoś tak, tylko składnie dopasuj do "swojego" sql'a:
SELECT item_id FROM (SELECT DISTINCT item_id eq_id FROM tab2 WHERE eq_id in (1,4,5)) t1 GROUP BY item_id HAVING SUM(eq_id) = 3
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona