![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 281 Pomógł: 0 Dołączył: 8.07.2005 Skąd: EU Ostrzeżenie: (0%) ![]() ![]() |
witam,
czy ponisze dwa zapytania powinny zwrócić taką samą liczbe rekordów?
pozdrawiam -------------------- człowiek nie sznurek wszystko wytrzyma
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 246 Pomógł: 19 Dołączył: 14.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Tak. A jeśli chodzi o łączenie tabel to używa się JOIN:
IN chyba lepiej nie używać (a już zwłaszcza w takim zapytaniu), bo podobno jest wolne. -------------------- "Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on właśnie to robi." - Albert Einstein |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Nie tyle IN jest wolne, co podzapytanie w części WHERE zapytania (bo jest wykonywane dla każdego wiersza z tabeli tabela1). Podobno 5.4 już potrafi to zoptymalizować sobie, ale nie sprawdzałem.
Zapytanie zapisane w 1 linijce optymizer przepisze na postać podaną przez Max Damage. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 281 Pomógł: 0 Dołączył: 8.07.2005 Skąd: EU Ostrzeżenie: (0%) ![]() ![]() |
dzieki,
tak znam roznice pomiedzy podanymi przeze mnie zapytaniami i rowniez wiem jak polaczyc dwie tabele przy uzyciu JOIN ale dlaczego te dwa zapytania wykonane u mnie na tych samych tabelach daja mi rozna ilosc rekordow? -------------------- człowiek nie sznurek wszystko wytrzyma
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
A dają? To ciekawe. Chętnie bym rzucił okiem na te tabele.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 281 Pomógł: 0 Dołączył: 8.07.2005 Skąd: EU Ostrzeżenie: (0%) ![]() ![]() |
no wlasnie bardzo ciekawe
oto tabele:
a oto zapytania ktorych uzywam:
-------------------- człowiek nie sznurek wszystko wytrzyma
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
11 pól TEXT?
![]() ![]() Wstawiłem sobie te dwie tabele, wypełniłem losowymi danymi i puściłem oba zapytania. Oba daję tyle samo wierszy. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 281 Pomógł: 0 Dołączył: 8.07.2005 Skąd: EU Ostrzeżenie: (0%) ![]() ![]() |
wiem, wiem z tymi textami.....
![]() jakas sugestia dlaczego u mnie tak sie dzieje? chyba typy pol nie maja z tym nic wspolnego? -------------------- człowiek nie sznurek wszystko wytrzyma
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
W żadnym wypadku nie powinny mieć... Dziwne to...
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 281 Pomógł: 0 Dołączył: 8.07.2005 Skąd: EU Ostrzeżenie: (0%) ![]() ![]() |
ok, tak czy inaczej dzieki za pomoc. jakos musze dojsc do tego co jest grane
-------------------- człowiek nie sznurek wszystko wytrzyma
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
Powyższe dwa zapytania mogą zwrócić identyczną ilość danych jedynie w przypadku, gdy wartości pól mobile nie powtarzają się w obrębie tabeli. Przyjrzyj się uważnie. W pierwszym zapytaniu masz dwie tabele złączone przez INNER JOIN, czyli automatycznie robisz z nich iloczyn kartezjański. Jeśli w "A" masz dwa wiersze z wartością "123456" i w B też dwa wiersze z czymś takim, daje Ci to cztery wiersze wynikowe:
A.1 z B.1 A.1 z B.2 A.2 z B.1 A.2 z B.2 W drugim przypadku pobierasz dane z jednej tabeli. Podzapytanie służy Ci jedynie do wybrania dozwolonych wartości mobile, a więc uzyskujesz: A.1 A.2 Ot i cała filozofia. -------------------- Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Aż sobie guza nabiłem jak sobie przywaliłem dłonią w czoło.
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Kolumny mobile nie są kluczami głównymi.
-------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 281 Pomógł: 0 Dołączył: 8.07.2005 Skąd: EU Ostrzeżenie: (0%) ![]() ![]() |
@Mchl: co masz na mysli?
@darko: a musza byc? -------------------- człowiek nie sznurek wszystko wytrzyma
|
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
@Mchl: co masz na mysli? @darko: a musza byc? Oczywiście, że nie muszą, ale w przypadku relacyjnych silników baz dobrze byłoby gdyby były (uniknąłbyś takich zagwozdek w przyszłości), poza tym wyciąganie danych po kluczach obcych jest szybsze niż po polu o typie varchar (jeśli się mylę to proszę mnie poprawić). -------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
@Mchl: co masz na mysli? To, że Zyx ma oczywiście rację ![]() Czy byłyby tutaj założone klucze czy nie, nie miałoby na wynik znaczenia. Jeśli chodzi o wydajność, to oczywiście założenie kluczy na kolumny mobile (niekoniecznie głównych, bo w tabela2 najwyraźniej nie jest to kolumna unikalna, a więc nie mamy tutaj relacji 1 do 1) przyspieszyłoby pracę tych zapytań. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 11:02 |