| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MySQL > Выборка из 2х таблиц |
| Автор: AnemoN 10.12.2009, 09:14 |
| Есть две таблицы names и names_used names nid name --- --- 1 vasya 2 kolya 3 petya 4 vanya names_used nid pid --- --- 1 2 3 2 Необходимо составить запрос, который вернет names.nid, names.name, т.о. что не существует names_used.nid = names.nid или существует, но names_used.pid!=x |
| Автор: Gluttton 10.12.2009, 09:37 | ||
ПисАл на коленке, возможно будут ошибки.
|
| Автор: AnemoN 10.12.2009, 09:44 |
| Большое вам спасибо, код идеально работает |
| Автор: DimW 10.12.2009, 09:52 | ||
так что ли:
|
| Автор: Zloxa 10.12.2009, 10:04 | ||
а подзапрос зачем?
|
| Автор: Gluttton 10.12.2009, 10:24 |
| Zloxa, Боялся, что не правильно таблицы соединятся (на работу торопился AnemoN, Не за что, только я ошибся и вместо неравенства с переменной поставил критерий на равенство DimW, Так, но захотелось новизны |
| Автор: DimW 10.12.2009, 10:34 | ||
грохнул уже |
| Автор: Zloxa 10.12.2009, 10:40 |
Зачем???... правильный ведь вариант был. А то что оптимизатор еще не способен нормальный план для такого выражения составить - то ж косяки оптимизатора. SQL - декларативный язык. Он выражает мысль(цель) но не методы(средства) ее реализации. за то он мне и люб |
| Автор: DimW 10.12.2009, 10:57 |
мда, не хорошо получилось, ща подредактирую... |
| Автор: Zloxa 10.12.2009, 11:52 |
Да, поиск по невхождению да неравенству - емок ;) При проектировании таких поисков лучше б избегать. |
| Автор: Akina 10.12.2009, 12:41 |
А какие индексы на таблицах? а какие индексы используются? лучше бы вместо абстрактного быстрее/медленнее дал бы планы запросов. И полные структуры таблиц. Тогда это было бы показательно. |
| Автор: Zloxa 10.12.2009, 13:44 |
| Akina, какие индексы могут быть использованы при отборе по неравенству? Разве что джойн...... Но джойн по индексу тоже не выгодным должен быть, потому как мы полностью сканируем обе таблицы, а так еще и индекс придется полностью сканировать. |
| Автор: Akina 10.12.2009, 14:19 |
| А где http://forum.vingrad.ru/index.php?showtopic=283279&view=findpost&p=2042660 отбор по неравенству? и что потребует сканирования таблицы? |
| Автор: Gluttton 10.12.2009, 14:32 | ||||
Я свой запрос уже подправил |
| Автор: Zloxa 10.12.2009, 14:47 |
Gluttton уже ответил... я ошибся, указав равенство. Даже если мы оставим равенство, полного сканирования обоих таблиц потребует отбор по is null |
| Автор: AnemoN 11.12.2009, 04:35 | ||
=x я сразу заметил и заменил на !=x, все-таки базовые навыки составления запросов у меня имеются.
Это всего-лишь "быстый" тест, на полноценное тестирование не претендующий. Кстати, не вдаваясь в подробности, самым производительным вариантом для меня оказывается отдельная таблица namesX для каждого рабочего профиля программы. Правда это больше смахивает на извращение, но помимо скорости есть еще одно важное преимущество - винт так жутко не кряхтит во время выполнения запроса и не мешает спать =) Поэтому, пока не смогу оптимизировать запрос, оставлю такой вариант. |