| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MySQL > Выбор записей из т1, чтобы таких не было в т2 |
| Автор: godsgame 22.7.2006, 22:08 |
| Выбираю записи в таблице1, но нужно выбрать эти записи так, чтобы записи с таким же ИД (поле) не существовало в таблице2. Можно ли обойтись 1 запросом? пример: таблица1: (ИД, ТЕКСТ) 1, 123 2, 456 3, 799 Таблица2: 1, 123 3, 799 Выбирет ТОЛЬКО 2-ую (2, 456) запись в таблице1. |
| Автор: Gold Dragon 22.7.2006, 22:47 | ||||
по моему так (нет возможность проверить сейчас)
Добавлено @ 23:02 в общем что-то написал какую то ерунду, не работает вот
|
| Автор: godsgame 23.7.2006, 11:53 |
| Gold Dragon, спасибо, работает! |
| Автор: Drache 24.7.2006, 08:30 |
| вообще можно так сказать "специально" для таких целей есть left join. Ну он то может и не сспециально для атких целей, но в таких случаях точно применяется. select * from t1 left join t2 using(id) where t2.id is null |
| Автор: Ignat 24.7.2006, 09:06 |
| godsgame, рекомендую воспользоваться советом Drache. |
| Автор: Gold Dragon 24.7.2006, 09:08 |
| Ignat, поясни |
| Автор: Ignat 24.7.2006, 09:17 |
| Gold Dragon, твой вариант с подзапросом. Первоначально будут выбраны все записи из т2, при этом они попадут по временную таблицу. Далее будет сравнение каждой записи из т2 с каждой записью из временной таблицы. В случае с LEFT JOIN нет подзапроса, поля для связывания (как правило) проиндексированы, следовательно будут выбраны только те записи, для которых было сопоставление с ключом NULL. Это значит, что производительность запроса с LEFT JOIN выше. |
| Автор: Gold Dragon 24.7.2006, 09:19 |
| Ignat, хочешь сказать, что все подзапросы выполняются намного медленнее? И как сильно загружают? |
| Автор: Gold Dragon 24.7.2006, 12:30 |
| Ignat, по логике вещей ты может и прав... но если запрос очень сложный, то его намного легче читать, особенно когда уже не помнишь что хотел |