Witam, mam 2 tabele o 1 kolumnie, ktora zawiera nazwy plików, teraz musze je porównac i wybrac które pliki sa w 1 tabeli a nie ma ich w drugiej i odwrotnie.
Jak to zrobic najszybciej ? W php zrobilem to na petlach ale dziala ok 40 sek.
Zaznaczam ze tabele te zawieraja ok 3 tys danych.
A moze da sie jakims jednym zapytaniem zagniezdzonym ?
TABLICA ROZPROSZONA - musisz zaimplementować algorytm haszowania.
Może 2 razy zapytanie:
SELECT kolumna
FROM tabela1
WHERE NOT kolumna IN (SELECT kolumna FROM tabela2)
Na MSSQL dla dwóch tabel z 60tys rekordów trwa to ok 1s.
hes napisał(a)
Może 2 razy zapytanie:
SELECT kolumna
FROM tabela1
WHERE NOT kolumna IN (SELECT kolumna FROM tabela2)
Na MSSQL dla dwóch tabel z 60tys rekordów trwa to ok 1s.
A mysql obsluguje zapytania zagniezdzone?
Od wersji 4.0 tak
Zainstalowalem wersje 4.0.24 - debug i zapodalem takie podzapytanie:
SELECT kod FROM
zdjecia_serwer WHERE NOT kod IN (select kod from zdjecia)
I dostalem komunikat:
#1064 - Something is wrong in your syntax obok 'kod FROM zdjecia_serwer
WHERE NOT kod IN (select kod from zdj' w linii 1
Dodam ze tabele zdjecia i zdjecia_serwer sa o identycznej strukturze czyli maja 2 kolumny, id oraz kod.
Masz rację. Na MySQL'u to nie zadziała, ale powinno zadziałać coś takiego:
SELECT zdjecia_serwer.kod
FROM zdjecia_serwer LEFT JOIN zdjecia ON zdjecia_serwer.kod=zdjecia.kod
WHERE zdjecia.kod IS NULL
Zainstalowalem na Krasnala 2.7 mysql-a 4.0 i wszystko bylo ok (chodzi mi o hasła) teraz zainstalowem 4.1 gdzie podobno sa podzapytania i nie moge sie dostac bo mnie nie wpuszczaa, jest jakies standardowe haslo ?
Standardowo jest chyba:
login: krasnal, hasło: krasnal
Najlepiej odpal MySQL Admina i tam w którejś zakładce są ustawienia w takim memo i na końcu tego textu znajduje się login i hasło.
hes napisał(a)
Masz rację. Na MySQL'u to nie zadziała, ale powinno zadziałać coś takiego:
SELECT zdjecia_serwer.kod
FROM zdjecia_serwer LEFT JOIN zdjecia ON zdjecia_serwer.kod=zdjecia.kod
WHERE zdjecia.kod IS NULL
Dziala ale predkosc koszmarna ponad minute trwa wyszukiwanie, nie ma czegos szybszego ? :-/
Glina napisał(a)
A mysql obsluguje zapytania zagniezdzone?
Nigdzie przed odpowiedzią hesa nie napisałeś, że chodzi o MySQL! Nie wymagaj domyślania się potrzebnych informacji przez Czytającego.
Możesz odczytać posortowane wartości z obu tabel i zrobić to w delphi. Czyli odczytujesz:
SELECT kod FROM zdjecia ORDER BY kod
Tak samo dla drugiej tabeli i w pętli czytajacej wszystkie elementy porównujesz je, przy czym:
- Jeśli elemety są różne, dodajesz mniejszy z nich do tabeli wynikowej zapytaniem INSERT i inkrementujesz jego licznik (nr. rekordu),
- Jaśli wlemety są równe, inkremetujesz licznik obu.
hes napisał(a)
Możesz odczytać posortowane wartości z obu tabel i zrobić to w delphi. Czyli odczytujesz:
SELECT kod FROM zdjecia ORDER BY kod
Tak samo dla drugiej tabeli i w pętli czytajacej wszystkie elementy porównujesz je, przy czym:
- Jeśli elemety są różne, dodajesz mniejszy z nich do tabeli wynikowej zapytaniem INSERT i inkrementujesz jego licznik (nr. rekordu),
- Jaśli wlemety są równe, inkremetujesz licznik obu.
Zrobilem tak, wrzucielm tabele do tablic i wszystko gra ale teraz jezeli w tablicy nr 1 jest np 300 rekordow a w tablicy 600 rekordow , to jak sie skonczy porownywanie reszta rekordow z tablicy 2 music byc tez wyrzucana jako nieobecna w tablicy nr 1 a to jak zrobic? :)
Bo to co napisalem gra jezeli jest po tyle samo elementow