![]() |
|
Модераторы: LSD |
![]()
|
|
| Royan |
|
|||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
Для простоты предположим, что у нас есть две одинаковых по своей структуре таблицы, но с разным содержанием (как такое может быть? ну предположим они лежат в разных базах)
Структуру выберем тоже простую:
Задача: объединить две таблицы в одну не потеряв при этом данных Еще раз повторю для простоты, у обеих таблиц одинаковая структура, но абсолютно разные данные -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Royan |
|
|||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
Zloxa, Извинияюсь забыл очень важно условие, дырявая я башка, самое важное иметь возможность однозначно выбрать ту запись, что раньше находилась конкретно в какой-либо из таблиц, пример:
Пусть в таблице "A" был Вася Пупкин, и в таблице "Б" тоже был Вася Пупкин, так вот в результирующей таблице должна быть возможность выбрать именно Васю Пупкина как из таблицы A так и из таблицы Б. Зачем это нужно? Проблема очень сложная, у меня таких одинаковых таблиц до черта и есть идея свести их все в одну. Первым шагом на пути такого долгого пути я обозначил, пока, слить все таблицы вместе, а вторым шагом избавиться от дублирующих записей. Обратная сторона задачи в том, что приложения, которые раньше использовали много разных таблиц теперь будут использовать одну и на первом шаге надо еще придумать как модифицировать старые запросы, чтобы выбирались правильные данные. -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
| Zloxa |
|
||||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
||||
|
|||||
| Royan |
|
||||||||||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
Окей, теперь как результат запроса
Тут есть такая проблема - хочется объеденить таблицы таким образом, чтобы не пришлось менять код запроса после того как два Васи Пупкиных сколлапсируют в одного. C одной стороны я бы мог написать запрос вот так:
А потом когда дело бы дошло до объединения Васей Пупкиных я бы написал так:
Но в этом случае я боюсь, что производительность сильно просядет из-за нагрузки, которую дает LIKE Может есть еще какие-то идеи как можно объединить таблички кроме как ввести дополнительный столбец с названием таблицы? -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
||||||||||
|
|||||||||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: нет Всего: 67 |
Royan, для приведенного вами примера есть GROUP_CONCAT (по карйней мере в mysql). Применяете ее по имени таблиц и группируете по всем выбранным полям.
-------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
| Deniz |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 7 Всего: 44 |
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
||||||
|
|||||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
Это исключает возможность использования индексного доступа к таблице по table1_field. Royan, Какого результата вы ожидаете, выполнив первый пункт Вашего плана и не выполнив второго? Какие издержки во втором пункте уменьшит выполнение первого пункта? Зачем вам разделение на два шага, почему не решить проблему сразу и одним этапом? Это сообщение отредактировал(а) Zloxa - 4.12.2008, 09:59 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 7 Всего: 44 |
Чтобы использовать индекс нужно для каждого 'Васи Пупкина' в другой таблице хранить список старых таблиц, в которых этот самый Вася присутствовал. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| Royan |
|
|||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
Всем спасибо! Решил остановиться на варианте с LIKE ввиду простоты и достаточности.
-------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
![]()
|
| Правила форума "Общие вопросы по базам данных" | |
|
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |