• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Łączenie dwóch tabel, zwracanie jednego wyniku

Object Storage Arubacloud
–1 głos
251 wizyt
pytanie zadane 2 listopada 2015 w SQL, bazy danych przez lrk Początkujący (300 p.)

Zależy mi na tym aby z powyższych dwóch tabel (ceny, produkty) wydobyć w zapytaniu nazwę produktu, wraz z opisem i ceną dla danej kategorii. Niestety stosując zapytanie:

SELECT p.nazwa_produkt, p.opis_produkt, c.cena_detal 
FROM produkty p, ceny c
WHERE c.id_cena = p.id_produkt AND p.id_kategoria = 1

zamiast wszystkich produktów gdzie kategoria = 1, otrzymuje tylko pierwszy rekord z tabeli produkty wraz z ceną. Co zrobić aby uzyskać wszystkie produkty o danej kategorii wraz z ceną?

1 odpowiedź

+1 głos
odpowiedź 2 listopada 2015 przez furas Maniak (53,800 p.)
wybrane 2 listopada 2015 przez lrk
 
Najlepsza

Źle połączyłeś tabele. W obu jest `id_produkt` i to powinieneś porównywać a nie `id_produkt` z `id_cena`

WHERE c.id_produkt = p.id_produkt 
  AND p.id_kategoria = 1 ;

 

komentarz 2 listopada 2015 przez lrk Początkujący (300 p.)
faktycznie! tyle już wczoraj siedziałem nad tą stroną, że nie zauważyłem takiego błędu... nie ma to jak rzucić świeżym okiem na sprawe :) dzięki!
komentarz 2 listopada 2015 przez furas Maniak (53,800 p.)

W pierwszym momencie też nie zauważyłem i chciałem doradzić sprawdzenie czy tw bazie rzeczywiście istnieje więcej wyników.

Nie mogłem sobie też przypomnieć konstrukcji SQL gdzie wystarczy podać raz wspólną nazwę kolumny. Coś w tym stylu

SELECT p.nazwa_produkt, p.opis_produkt, c.cena_detal 
FROM produkty p
JOIN ceny c USING(id_produkt)
WHERE p.id_kategoria = 1

 

komentarz 2 listopada 2015 przez Boshi VIP (100,240 p.)
Tak furas tylko trzeba wziąć pod uwagę, że muszą być identyczne nazwy kolumn inaczej dostaniemy  coś czego nie oczekiwalibyśmy :)
komentarz 2 listopada 2015 przez furas Maniak (53,800 p.)

Właśnie w tym przypadku nazwy kolumn są identyczne :) 

    WHERE c.id_produkt = p.id_produkt

Inaczej bym tego nie proponował

komentarz 2 listopada 2015 przez Boshi VIP (100,240 p.)
Tak, tak wiem.  Pisałem raczej ogólnikowo, by ktoś potem nie próbował łączyć dwóch tabel mając inne nazwy :)
komentarz 2 listopada 2015 przez furas Maniak (53,800 p.)
OK, to rozumie - początkującym czasami umyka taki fakt i trzeba o tym przypominać :)

---

W sumie jak się coś używa sporadycznie to i zaawansowanym może umknąć :)

Podobne pytania

0 głosów
2 odpowiedzi 545 wizyt
pytanie zadane 28 lipca 2015 w SQL, bazy danych przez migacz100 Mądrala (5,410 p.)
0 głosów
2 odpowiedzi 293 wizyt
pytanie zadane 3 lutego 2018 w SQL, bazy danych przez Dynamic Bywalec (2,910 p.)
+1 głos
2 odpowiedzi 329 wizyt
pytanie zadane 8 lipca 2021 w SQL, bazy danych przez Kenzy Obywatel (1,160 p.)

92,627 zapytań

141,488 odpowiedzi

319,852 komentarzy

62,009 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...