![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 1 Dołączył: 16.01.2008 Skąd: Świnoujście Ostrzeżenie: (0%) ![]() ![]() |
Witam
Postaram się opisać problem w miarę jasno i czytelnie: Posiadam tabelę z przedmiotami ( id | nazwa ) oraz tabelę z parametrami tych przedmiotów ( id | p_id | wartosc ) - p_id to id parametru Każda wartość parametru to nowy wpis w tabeli; W jaki sposób sklecić zapytanie do bazy danych aby sprawdzić czy przedmiot z określonym id posiada wszystkie wymienione parametry np. chce sprawdzić czy przedmiot z id=5 posiada parametry o wartości A, B, C? Zapytanie z IN() odpada np. zwróci ten sam wynik jeżeli dam IN(A, (IMG:style_emoticons/default/cool.gif) i taki sam jeżeli dam IN(A,B,C) a potrzebuje sprawdzić czy przedmiot posiada wszystkie z wymienionych; Zapytanie z OR lub AND także nie zdało tutaj egzaminu; Będę wdzięczny za wszelką pomoc i sugestie; Pozdrawiam |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
relacja 1 do wielu? (IMG:style_emoticons/default/wink.gif)
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 1 Dołączył: 16.01.2008 Skąd: Świnoujście Ostrzeżenie: (0%) ![]() ![]() |
Tak, jeżeli masz na myśli 1 rekord (przedmiot) do wielu parametrów (IMG:style_emoticons/default/wink.gif)
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
pewnie chodzi Ci o coś z rodziny Join http://pl.wikipedia.org/wiki/Join_%28SQL%29 (IMG:style_emoticons/default/wink.gif)
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 417 Pomógł: 44 Dołączył: 23.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
A co Ci nie działa gdy stosujesz AND ? i WHERE ?
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 1 Dołączył: 16.01.2008 Skąd: Świnoujście Ostrzeżenie: (0%) ![]() ![]() |
JOINowałem na wszystkie znane sobie sposoby, jeżeli macie jakieś pomysły będę wdzięczny za pomoc
Co do AND to nielogiczne jest raczej dawanie 'WHERE wartosc='A' AND wartosc='B' AND wartosc='C'... |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
a INNER JOIN próbowałeś? bo to jest odpowiednik 'WHERE wartosc='A' AND wartosc='B' AND wartosc='C' (IMG:style_emoticons/default/wink.gif)
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 1 Dołączył: 16.01.2008 Skąd: Świnoujście Ostrzeżenie: (0%) ![]() ![]() |
Mógł bym Cię prosić o krótki przykład na podstawie tego co opisałem na początku (tabela przedmioty i parametry)?
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
przyglądając się bardziej stwierdzam, że jednak bliżej będzie tu CROSS JOIN a przykład masz tu http://pl.wikipedia.org/wiki/Join_%28SQL%2...typu_CROSS_JOIN (IMG:style_emoticons/default/wink.gif)
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 1 Dołączył: 16.01.2008 Skąd: Świnoujście Ostrzeżenie: (0%) ![]() ![]() |
Jakoś mi tutaj nie za bardzo pasuje CROSS JOIN (łączy każdy wiersz tabeli tabela1 z każdym wierszem tabeli tabela2) a w tym przypadku w tabeli 'przedmioty' mamy jeden wiersz a w tabeli 'parametry' kilka przyporządkowanych do konkretnego przedmiotu
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
faktycznie masz rację... zaćmiło mnie (IMG:style_emoticons/default/biggrin.gif) jednak chyba bym pozostał przy 'WHERE wartosc='A' AND wartosc='B' AND wartosc='C' bo dało by się to napisać inaczej ale tak naprawdę poco sobie tak utrudniać sprawę...
Ten post edytował com 20.09.2013, 21:33:26 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 1 Dołączył: 16.01.2008 Skąd: Świnoujście Ostrzeżenie: (0%) ![]() ![]() |
A co sądzisz o podzapytaniach nazywanych także zapytaniami zagnieżdżonymi?
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
powiem tak to wszystko zależy od tego jak to rozplanujemy, bo to że czasem wydaje nam się, że użycie po prostu WHERE i kilka instrukcji to czysta amatorszczyzna... wcale nie musi oznaczać, że tak jest gorzej... bo co z tego że rozbudujemy nasze zapytanie na kilka poziomów skoro może się okazać, że czas dostępu jest o wiele dłuższy... np na szybko znalazłem porównanie NOT IN vs. NOT EXISTS vs. LEFT JOIN / IS NULL i Join w tym wypadku okazał się na szarym końcu...
http://explainextended.com/2009/09/15/not-...ull-sql-server/ |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 1 Dołączył: 16.01.2008 Skąd: Świnoujście Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję Ci bardzo za pomoc ale mimo niej i kilku dni spędzonych nad tym problemem nie przychodzi mi nic innego do głowy jak zapytanie zagnieżdżone (być może moja wiedza o zapytaniach nie jest jeszcze na odpowienim poziomie) dlatego jeżeli ktokolwiek ma konkretną propozycję co do wyglądu takiego zapytania - będę bardzo wdzięczny
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 1 Dołączył: 16.01.2008 Skąd: Świnoujście Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję Ci bardzo za pomoc, działa perfekcyjnie tak jak tego potrzebowałem! Rozumiem, że na koniec jest sprawdzana ilość wpisów dla danego id - jeżeli jest tyle ile podamy zwraca nam prawidłowy wynik?
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
tak, zlicza ile było parametrów pp.wartosc i jeśli były 3 to tak jak powiedziałeś zwraca wynik (IMG:style_emoticons/default/wink.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 16:16 |