![]() |
|
Модераторы: skyboy |
![]()
|
|
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
Есть 2 таблицы, в которых присутствует связующее поле.
Вот таким запросом я выбираю записи из первой таблицы и сопостовляю данные из 2-й таблицы.
Как сделать, чтобы из первой таблиы выбирались ТОЛКО данные, которым нет соответствия во-второй таблице ? -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
NOT IN?
еще вариант - OUTER JOIN ... WHERE FIELD IS NULL еще вариант - MINUS (но его кажется нет в MySQL) но по моему это извращения..не лучше хранить статус в таблице is_deleted? Это сообщение отредактировал(а) azesmcar - 6.4.2010, 08:37 |
|||
|
||||
| Zloxa |
|
||||||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Добавлено через 2 минуты и 21 секунду еще вариант - коррелированный not exists
Это сообщение отредактировал(а) Zloxa - 6.4.2010, 08:35 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
||||||
|
|||||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
||||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
Спасибо, оба варианта рабочие.
Сбило с толку, что "is null" != "= null" -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Нет, у Zloxa для MySQL (и подавляющего имхо большинства иных СУБД) всё правильно. Причём при индексах по ce129.id и deletedobjects.id_object соответственно - должно просто летать, в отличие от NOT IN / NOT EXIST, где подзапрос == временная таблица. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
Akina
только что запустил оба варианта вариант с LEFT JOIN ![]() вариант с NOT IN ![]() поля индексированы. и я не совсем понимаю какая разница..что LEFT JOIN, что LEFT OUTER JOIN..это же одна фигня (или я ошибаюсь?). Это сообщение отредактировал(а) azesmcar - 6.4.2010, 09:10 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| azesmcar |
|
||||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
Akina
Да, сейчас..
|
||||||||
|
|||||||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Да, хотя явного доказательства тому, что слово outer может быть опущено без изменения смысла фразы, в документации по MySql я не нашел. Видимо составители документации считали это столь очевидным, что им в голову не пришло, что могут быть пытливые умы, которые зададутся таким вопросом. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
Ага
интересно не правда ли Это сообщение отредактировал(а) azesmcar - 6.4.2010, 10:22 |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
на самом деле реализации через not in, not exists, outer join - в общем случае должны давать разные результаты. outer join будет "размножать исходный" набор, но не в нашем случае, т.к. отношение у нас многие к одному, объединение у нас происходит по pk, в нашем случае left join и not exists взаимозаменяемы. Not in и not exists дадут разные результаты если фильтруемое поле может принимать значение null. Не мог бы ты показать каков будет план, если накинуть на records.customer_id ограничение not null?
Добавлено через 2 минуты и 44 секунды зы под "нашим случаем" в последнем посте я подразумеваю случай, показанный azesmcar. У ТС, Судя по всему иной случай. Думается мне что у него критериями объединения вступают pk потому все три варианта эквивалентны. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
уже стоит. повторю свой вопрос, в случае ТС я не вижу причин использования отдельной таблицы, почему бы не использовать просто boolean флаг is_deleted? Это будет намного быстрее. Добавлено @ 11:23 оп...я дико извиняюсь...у меня с таблицы куда то индекс пропал сейчас создает, таблица большая, это займет некоторое время, потом запущу заново и посмотрим на реальные результы. Это сообщение отредактировал(а) azesmcar - 6.4.2010, 11:33 |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
сделал, проверил - картина не изменилась. Резульаты те же самые.
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |