![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 10.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Są dwie tabele: kategoria i produkt (jeden do wielu) Jak z tabeli 'kategoria' wybrać jedną kategorię zawierającą produkty - po sortowaniu alfabetycznym chcę pominąć "puste" kategorie i wybrać pierwszą, do której w tabeli 'produkt' jest przyporządkowanych więcej niż zero produktów? Chodzi o przerobienie tego zapytania, tak by wykluczało 'puste' kategorie
z góry dziękować ;] |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 121 Pomógł: 22 Dołączył: 22.06.2012 Ostrzeżenie: (0%) ![]() ![]() |
Osobistycznie nie znam się na zapytaniach z dwóch tabel, ale wiem że do czegoś takiego trzeba znać strukturę obu tabel. Więc by coś wykombinować podaj jakie tam masz kolumny w obu tabelach.
-------------------- Sorka za błędy ort. jak coś dajcie znać na PW to popoprawiam.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 10.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
kategoria (id, nazwa)
produkt (id, id_kategorii, nazwa) przykładowa zawartość tabeli kategoria: 1, TV/AGD 2, Samochody 3, Elektronika 4, Artykuły spożywcze przykładowa zawartość tabeli produkt: 1, 1, Telewizor Sony 2, 1, TV LG 3,1, DVD Sharp 4,1, Toster Panasonic 5,2, Audi 6,2, Volvo 7,3, Laptop 8,3, Palmtop 9,3, Skaner Widać, że w produktach nie ma żadnych rekordów przypisanych do kategorii 'Artykuły spożywcze' Jak skonstruować zapytanie aby z tabeli 'kategoria' wskazać po sortowaniu alfabetycznym pierwszy rekord, który ma przyporządkowane produkty w drugiej tabeli? Co trzeba dodać do poniższego? INNER JOIN?
powyższe zapytanie zwróci 'Artykuły spożywcze' a chciałbym aby zwróciło 'Elektronika' |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 355 Pomógł: 533 Dołączył: 15.01.2010 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Powinno działać edit: w sumie, pewnie można to zrobić lepiej i wydajniej, ale ja się na tym nie znam ;P Ten post edytował Damonsson 17.07.2012, 15:24:27 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
To ja podam Ci łopatologiczne opisy złączeń... W nawiasach są słowa opcjonalne, które mogą, ale nie muszą wystąpić.
NATURAL JOIN - zwraca rekordy łącząc w obu tabelach rekordy po kolumnie o tej samej nazwie (INNER) JOIN - zwraca rekordy pasujące do warunku złączenia w obu tabelach LEFT (OUTER) JOIN - zwraca wszystkie rekordy tabeli po lewej stronie, nawet jeśli żaden po prawej nie pasuje RIGHT (OUTER) JOIN - zwraca wszystkie rekordy tabeli po prawej stronie, nawet jeśli żaden po lewej nie pasuje FULL (OUTER) JOIN - zwraca wszystkie rekordy obu tabel, nawet jeśli nie pasuje do nich żaden z przeciwnej tabeli CROSS JOIN - zwraca iloczyn kartezjański wszystkich rekordów w obu tabelach Popatrz i zauważ, który tu pasuje ![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 2 355 Pomógł: 533 Dołączył: 15.01.2010 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Czyli w takim wypadku lepiej użyć INNER? Wydajniej, szybciej? Bo LEFT też zadziała.
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Oba zadziałają, ale przy LEFT musiałbyś eliminować rekordy gdzie kategoria ma NULLA (lewa tabela to kategorie) lub przedmiot nie jest jeszcze w żadnej kategorii jeszcze bądź mu ją usunięto (lewa tabela to przedmioty).
-------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 821 Pomógł: 111 Dołączył: 11.09.2006 Skąd: Biała Podlaska Ostrzeżenie: (0%) ![]() ![]() |
To ja podam Ci łopatologiczne opisy złączeń... W nawiasach są słowa opcjonalne, które mogą, ale nie muszą wystąpić. Dzięki thek i mi się przyda, często miałem z tym problem ![]() -------------------- |
|
|
![]()
Post
#9
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Uważaj na NATURAL JOIN i tabele posiadające kilka kolumn z tymi samymi nazwami, bo co baza to inaczej może to mieć rozwiązane
![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 09:19 |