MySQL Wybrać rekordy z tabeli znajdujące się w innych tabela
Moderatorzy: Moderatorzy, Administratorzy
MySQL Wybrać rekordy z tabeli znajdujące się w innych tabela
Witam, przyznaje się że studiowałem już książki o MySQL, ale nadal mam kłopot z pewnymi zapytaniami
Mam tabelę z nazwami warzyw (dla przykładu) "warzywa"
pola 'id' typu int oraz 'name' typu varchar
Mam jeszcze dwie tabele z opisami tych warzyw. (np. "zielone" oraz "czerwone")
pola 'id' 'name' oraz 'description'
Jak wykonać zapytanie znajdujące wszystkie rekordy z pierwszej tabeli występujące w polu 'description' pozostałych dwóch tabel ?
Jak ma brzmieć to zapytanie ? "select warzywa.name where co dalej ? "
PRZEPRASZAM, zapomniałem nadmienić że ma znajdować rekordy znajdujące się w jednej LUB w drugiej bazie (lub w obydwóch) NIEKONIECZNIE W OBYDWÓCH NARAZ
Mam tabelę z nazwami warzyw (dla przykładu) "warzywa"
pola 'id' typu int oraz 'name' typu varchar
Mam jeszcze dwie tabele z opisami tych warzyw. (np. "zielone" oraz "czerwone")
pola 'id' 'name' oraz 'description'
Jak wykonać zapytanie znajdujące wszystkie rekordy z pierwszej tabeli występujące w polu 'description' pozostałych dwóch tabel ?
Jak ma brzmieć to zapytanie ? "select warzywa.name where co dalej ? "
PRZEPRASZAM, zapomniałem nadmienić że ma znajdować rekordy znajdujące się w jednej LUB w drugiej bazie (lub w obydwóch) NIEKONIECZNIE W OBYDWÓCH NARAZ
Ostatnio zmieniony 2006-05-05, 13:45 przez Sektor, łącznie zmieniany 1 raz.
Re: MySQL Wybrać rekordy z tabeli znajdujące się w innych tabela
Jeśli dobrze rozumiem problem to ja bym to zrobił tak:
A na polu name we wszystkich tych tabelach dobrze by było założyć indeksy, zapytania się bedą szybciej wykonywały.
Mariusz
Kod: Zaznacz cały
select w.name from warzywa w
where exists (select 1 from zielone z
where z.name = w.name)
or exists (select 1 from czerwone c
where c.name = w.name)
Mariusz
Re: MySQL Wybrać rekordy z tabeli znajdujące się w innych tabela
Zagnieżdżone selecty działają dopiero od MySQL 5.0. Lepszy chyba byłby jakiś JOIN.
Nie jestem na 100% przekonany że to zadziała bo takich połączeń (albo tu albo tu) nie widziałem jeszcze.
Kod: Zaznacz cały
SELECT warzywa.name FROM warzywa, zielone, czerwone WHERE warzywa.name=zielone.name OR warzywa.name=czerwone.name
[size=75]Hannibal@current@2.6.X[/size]
Re: MySQL Wybrać rekordy z tabeli znajdujące się w innych tabela
Więc w currencie jest już odpowiednia wersja MySQL-a
Jak dla mnie, czyli na oko, bo nie mam tutaj zainstalowanego MySQL-a, to Twoje zadziała.
Jedynie co jeszcze, to się rekordy mogą rozmnożyć w niektórych przypadkach, więc dorzuciłbym group by warzywa.name na końcu.
Jak dla mnie, czyli na oko, bo nie mam tutaj zainstalowanego MySQL-a, to Twoje zadziała.
Jedynie co jeszcze, to się rekordy mogą rozmnożyć w niektórych przypadkach, więc dorzuciłbym group by warzywa.name na końcu.
Ostatnio zmieniony 2006-05-06, 23:00 przez Mariusz, łącznie zmieniany 1 raz.
Re: MySQL Wybrać rekordy z tabeli znajdujące się w innych tabela
Co do rozmnożenia nie jestem przekonany, ale lepszym wyjściem w tym wypadku było by DISTINCT na początku.
[size=75]Hannibal@current@2.6.X[/size]
Re: MySQL Wybrać rekordy z tabeli znajdujące się w innych tabela
Dlaczego lepszym? Oba zapytania dadzą taki sam wynik i wydajnościowo też powinny być identyczne w tym przypadku.
Re: MySQL Wybrać rekordy z tabeli znajdujące się w innych tabela
Co do wydajności mam wątpliwości. IMHO DISTINCT odrzuca zduplikowane rekordy na początku, a GROUP BY najpierw wybiera wszystkie i dopiero grupuje. Ale to chyba kwestia doczytania dokumentacji jak działa optymalizacja w tych wypadkach (ewentualnie można przeprowadzić test na jakiejś duuuużej bazie).
[size=75]Hannibal@current@2.6.X[/size]
Re: MySQL Wybrać rekordy z tabeli znajdujące się w innych tabela
Witam,
Nie wiem czy dobrze zrozumialem ale ja bym te tabele polaczyl kluczem obcym i wtedy dajesz
Co do konkretnych kolumn w tabelach to zgaduje bo nie wiem dokladnie jak to wyglada u Ciebie
pozdrawiam
Nie wiem czy dobrze zrozumialem ale ja bym te tabele polaczyl kluczem obcym i wtedy dajesz
Kod: Zaznacz cały
select * from warzywa,opisy where warzywa.id_w=opsiy.id_o
pozdrawiam
[url=http://userbars.org][img]http://img131.imageshack.us/img131/1820/jewishcopymb1.gif[/img][/url]
[url=http://userbars.org][img]http://img239.imageshack.us/img239/9184/polandbar2bj9.gif[/img][/url]
[url=http://userbars.org][img]http://img239.imageshack.us/img239/9184/polandbar2bj9.gif[/img][/url]