Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Lista rekordów bez powiązań
Forum PHP.pl > Forum > Bazy danych > MySQL
Ureus
Mam 2 tabele:

Miasto
---------------------
| IDM | Miasto |
| 1 | Katowice |
| 2 | Warszawa |
| 3 | Gdańsk |
---------------------

Użytkownicy
-------------------------
| IDM | IDU | Imie |
| 1 | 1 | Piotr |
| 1 | 2 | Paweł |
| 3 | 3 | Jacek |
-------------------------

Jak znaleźć wszystkie rekordy z tabeli 'Miasto' do których nie jest przypięty żaden użytkownik ? Czyli dla tego przykładu dla miasta Warszawa.
flv
  1. SELECT * FROM miasto m WHERE m.IDM<>uzytkownicy.IDM;
Ureus
Niestety to nie tak. W wyniku Twojego zapytania otrzymamy listę par rekordów które wzajemnie nie występują w bazach. Ja potrzebuję listę Miast które nie mają przyporządkowanyc Użytkowników.
Kicok
Tutaj potrzebne będzie podzapytanie: http://dev.mysql.com/doc/refman/5.0/en/any...subqueries.html
lub ewentualnie LEFT JOIN i IS NULL
Ureus
Znajomy chyba znalazł rozwiązanie. Może komuś się przyda:

  1. SELECT Miasto
  2. FROM Miasto WHERE Miasto.IDM <>
  3. ALL (
  4.  
  5. SELECT Uzytkownicy.IDM
  6. FROM Uzytkownicy GROUP BY IDM
  7. )


Po testach

Rozwiązanie 1 (troszkę inna struktura bazy):

  1. SELECT spolki.Nazwa
  2. FROM spolki WHERE spolki.IDSpolki <>
  3. ALL (
  4.  
  5. SELECT notowania.IDSpolki
  6. FROM notowania GROUP BY notowania.IDSpolki
  7. )


Rozwiązanie 2:
  1. SELECT spolki.Nazwa
  2. FROM spolki LEFT JOIN notowania ON spolki.IDSpolki = notowania.IDSpolki
  3. WHERE notowania.IDSpolki IS NULL


Tabela notowania - 500 000 rekordów
Tabela spolki 200 rekordów
Wynik odpowiedzi 2 rekordy

Czasy:
Rozwiązanie odp. 1 - ok. 45 sek exclamation.gif!
Rozwiązanie odp. 2 - ok. 0,6 sekundy
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.