Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySql] Select z 3 tabel, MySql się wiesza
Forum PHP.pl > Forum > Bazy danych
kodereq
Witam.

Ma ktoś koncepcję, czemu takie zapytanie zawiesza mi serwer bazy danych ?

  1. SELECT *
  2. FROM auta, osoby, wypadki
  3. WHERE auta.pesel = osoby.pesel AND wypadki.rej = auta.rej


Nawet takie zapytanie powoduje zawiechę:

  1. SELECT *
  2. FROM auta, osoby, wypadki
  3. WHERE auta.pesel = osoby.pesel


Coś takiego natomiast działa w ciągu 0,0033 sek.
  1. SELECT *
  2. FROM auta, osoby
  3. WHERE auta.pesel = osoby.pesel


Tabele są wypełnione małą ilością danych. Można je znaleźć pod linkiem klik! jako materiały do zadania 6 z matury rozszerzonej. Zaznaczam, że powyższe kwerendy są mi potrzebne do podpunktu a).
JoShiMa
A ile masz tych wierszy w poszczególnych tabelach?

Zapytanie:
  1. SELECT *
  2. FROM auta, osoby, wypadki
  3. WHERE auta.pesel = osoby.pesel


Łączy Ci wiersze z auta i osoby (nie wiem ile Ci takich powiązań wychodzi) a następnie każdy z tych połączonych wierszy łączy z każdym wierszem z tabeli wypadki. Czyli jeśli w tabeli wypadki masz n wierszy a powiązań takich, że auta.pesel = osoby.pesel masz m to to zapytanie tworzy Ci m x n wierszy i to może już być całkiem sporo (u Ciebie w najgorszym wypadku 689x500).

IMO bardziej elegancko, moim zdaniem jest robienie takich zapytań w następujący sposób:

  1. SELECT *
  2. FROM auta LEFT JOIN osoby ON auta.pesel = osoby.pesel LEFT JOIN wypadki ON auta.nr_rejestr=wypadki.nr_rejestr
kodereq
Dzieki, dokładnie o to mi chodziło.

Czy mogłabyś mi jeszcze wyjaśnić jak działają te JOINy od strony technicznej ? Chodzi o podobne oszacowanie jak powyżej. Oczywiście odwdzięczę się magicznym kliknięciem smile.gif Z góry dziękuję.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.