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

Pytanie relacyjne do trzech tabel

Object Storage Arubacloud
0 głosów
141 wizyt
pytanie zadane 24 grudnia 2016 w SQL, bazy danych przez ThePatrykOOO Dyskutant (8,400 p.)

Witam, mam problem z tym i podobnymi zapytaniami sql. Chodzi o zapytanie relacyjne do trzech tabel tak wygląda moje zapytanie: 

SELECT r.idreport, u.login, c.tresc FROM report_coment as r, usery as u, coments as c WHERE r.idusera = u.idusera AND r.idusera = c.idusera AND c.idusera = r.idusera LIMIT 0,40

W każdej tabeli są kolumny idusera. Gdy robię takie zapytania zwraca mi 2 razy ten sam rekord. Jeżeli ktoś rozwiąże mój problem z góry dziękuję za pomoc. 

3 odpowiedzi

0 głosów
odpowiedź 24 grudnia 2016 przez hoktaur Pasjonat (22,250 p.)
Źle to zapisałeś brak relacji pomiędzy tabelami powinieneś się zainteresować LEFT JOIN  lub RIGHT JOIN itp.

https://www.youtube.com/watch?v=P2YT9PvflUM&list=PLOYHgt8dIdoymv-Wzvs8M-OsKFD31VTVZ&index=2

np. http://www.w3schools.com/sql/sql_join_left.asp
0 głosów
odpowiedź 24 grudnia 2016 przez skrzatjedyny Gaduła (3,150 p.)
Zainteresuj sie INNER JOIN itd ;)
0 głosów
odpowiedź 12 lutego 2017 przez Leszek W Początkujący (260 p.)

Miałem podobny problem i choć udało mi się go rozwiązać poprzez podzapytanie, ciągle jest to dla mnie niejasne.

Jeżeli w złączonych tabelach w kolumnach po których nastąpiło złączenie występują kilka razy takie same wartości, otrzymujemy iloczyn kartezjański (o ile dobrze zrozumiałem).

Postaram się jasno to opisać:

Mam trzy tabele: A, B, C, we wszystkich jest kolumna "Player_ID" wg. których następuje związanie tabel. Chcę wyciągnąć wszystkie informacje, gdzie "Player_ID = 1". W tabeli A Player_ID o wartości 1 występuje 3 razy, w tabeli B 1x, w C 10X.

Wysyłając takie zapytanie:

SELECT 	A.Name, B.Player_ID, SUM(C.Wartosc) 
FROM  A, B, C
WHERE A.Player_ID = B.Player_ID
AND B.Player_ID = C.Player_ID

GROUP BY  C.Player_ID
										

otrzymuję SUM(C.Wartosc) pomnożoną przez ilość wystąpień Player_ID w kolumnie A.

Przy LEFT JOIN wynik jest taki sam. Jedynie używając podzapytania i usunięcie złączenia z tabelą A udało mi się uzyskać prawidłowy wynik. Ale chyba jest na to jakieś inne, prostsze rozwiązanie?

Podobne pytania

0 głosów
1 odpowiedź 744 wizyt
pytanie zadane 26 kwietnia 2017 w SQL, bazy danych przez Elninho20 Nowicjusz (140 p.)
0 głosów
1 odpowiedź 1,669 wizyt
pytanie zadane 29 stycznia 2018 w SQL, bazy danych przez Dagon Nowicjusz (120 p.)
0 głosów
1 odpowiedź 586 wizyt
pytanie zadane 31 maja 2017 w SQL, bazy danych przez Tabaluga Początkujący (280 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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!

...