Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Lista rekordów bez powiązań
Ureus
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 9.11.2003
Skąd: Dąbrowa Górnicza

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
flv
post
Post #2





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 29.06.2007

Ostrzeżenie: (0%)
-----


  1. SELECT * FROM miasto m WHERE m.IDM<>uzytkownicy.IDM;
Go to the top of the page
+Quote Post
Ureus
post
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 9.11.2003
Skąd: Dąbrowa Górnicza

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Kicok
post
Post #4





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


Tutaj potrzebne będzie podzapytanie: http://dev.mysql.com/doc/refman/5.0/en/any...subqueries.html
lub ewentualnie LEFT JOIN i IS NULL

Ten post edytował Kicok 4.07.2007, 18:10:06
Go to the top of the page
+Quote Post
Ureus
post
Post #5





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 9.11.2003
Skąd: Dąbrowa Górnicza

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) !
Rozwiązanie odp. 2 - ok. 0,6 sekundy

Ten post edytował Ureus 5.07.2007, 08:33:09
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.09.2025 - 23:08