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

Pytanie relacyjne do trzech tabel

VPS Starter Arubacloud
0 głosów
154 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ź 815 wizyt
pytanie zadane 26 kwietnia 2017 w SQL, bazy danych przez Elninho20 Nowicjusz (140 p.)
0 głosów
1 odpowiedź 1,735 wizyt
pytanie zadane 29 stycznia 2018 w SQL, bazy danych przez Dagon Nowicjusz (120 p.)
0 głosów
1 odpowiedź 675 wizyt
pytanie zadane 31 maja 2017 w SQL, bazy danych przez Tabaluga Początkujący (280 p.)

92,959 zapytań

141,921 odpowiedzi

321,152 komentarzy

62,293 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...