![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 401 Pomógł: 1 Dołączył: 10.03.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Otóż mam 2 tabeli o identycznej strukturze, ale zawierające różne dane:
Pierwsza tabela zawiera 2862 rekordy, a druga 2892 rekordy. Robię zapytanie:
Chcę pobrać tylko te rekordy z obu tabel, nazwy których w polu name są identyczne. Według mojej wiedzy, powinno mi pobrać około 2500 rekordów, a pobiera aż 4431, gdzie robię źle? |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Zamiast LEFT JOIN użyj samego JOIN (o ile dobrze zrozumiałem problem).
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 4 340 Pomógł: 542 Dołączył: 15.01.2006 Skąd: Olsztyn/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Bo źle napisałeś zapytanie jeżeli chesz żeby zwróciło tylko tam gdzie sa takie samę name
to zrob sobie połącznie twarde w where -------------------- I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy. QueryBuilder, Mootools.net, bbcradio1::MistaJam http://www.phpbench.com/ |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 401 Pomógł: 1 Dołączył: 10.03.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Niestety w obu przypadkach daje 4385 wyników
![]() |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 4 340 Pomógł: 542 Dołączył: 15.01.2006 Skąd: Olsztyn/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Niestety w obu przypadkach daje 4385 wyników ![]() No to chyba coś spi*****
-------------------- I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy. QueryBuilder, Mootools.net, bbcradio1::MistaJam http://www.phpbench.com/ |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
-------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 401 Pomógł: 1 Dołączył: 10.03.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Niestety to samo. Po przejrzeniu wyników, zauważyłem, że powielanych jest mnóstwo wierszy z jednej i drugiej tabeli. Nie wiem dlaczego tak się dzieje. Na przykład jak wiersz o nzawie XXX jest w jednaj tabeli sztuk 5, to na wyniku jest ich sztuk 15...
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
A tak?
lub
-------------------- |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 401 Pomógł: 1 Dołączył: 10.03.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
A tak?
to daje 4 386 rekordów lub
a to daje MySQL zwrócił komunikat: #1064 - Something is wrong in your syntax obok 'USING ('name') LIMIT 0, 30' w linii 1 Może coś źle w bazie mam. Próbuje dopasować kolumny KOD (bo interesuje mnie zgranie kodów z dwóch tabel) względem nazw... Ten post edytował miedzna 21.08.2009, 12:23:10 |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 781 Pomógł: 256 Dołączył: 29.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 744 Pomógł: 118 Dołączył: 14.02.2009 Skąd: poziome Ostrzeżenie: (0%) ![]() ![]() |
Pokaz kawalek danych z tej tabeli...
Czy w Mysql pola textowe sa porownywane tylko do okreslonej dlugosci? (w konfigu cos sie zmienia). Wiec jesli name masz np "Gertruda Kowalska", "Gertruda Malinowska", "Gertruda Stefanska" to przy dlugosci laczenia 8 znakow .. wyjdzie Ci 9 wynikow ps. to tylko domysly.. pokaz dane z kolumna NAME przez ktora laczysz -------------------- śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu.. |
|
|
![]()
Post
#12
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Cytat Nie wiem dlaczego tak się dzieje. Na przykład jak wiersz o nzawie XXX jest w jednaj tabeli sztuk 5, to na wyniku jest ich sztuk 15... A ile masz rekordow z ta nazwa w drugiej tabeli, niech zgadne... 3? -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
A zwróciłeś uwagę, czy aby nie dostajesz złączeń z nullami. Joiny mają tę ciekawą właściwość, że jeśli nie mają co znaleźć w warunku złączenia drugiej tabeli to i tak się wyświetlą, tyle że dopiszą sobie do brakujących kolumn NULL. Posortuj więc po kolumnach z dołączanej tablicy, a zapewne wysypią się tam nulle. W warunku WHERE więc wywal te które NULL w odpowiedniej kolumnie posiadają a liczba rekordów na pewno zmaleje. Nie wiem jednak czy aż do takich wartości jakie byś chciał. Moim zdaniem bowiem muszą się gdzieś nazwy dublować i dlatego w joinie masz sytuacje, że do rekordu z pierwszej tabeli można przypiąć kilka z drugiej, co mnoży liczbę rezultatów po złączeniu. Zrób sobie najlepiej:
i sprawdź czy są zdublowane rekordy ![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 26.06.2025 - 05:58 |