Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Перенос данных из таблицы с одним НЕ атомарным столбцом в другую таблицу / 15 сообщений из 15, страница 1 из 1
11.12.2015, 00:05
    #39125427
Lord_Sota_Sil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных из таблицы с одним НЕ атомарным столбцом в другую таблицу
Комрады прошу вашей помощи, не могу разобраться с примером книги т.к. там это тупо пропущено, ситуация:
есть главная таблица

Код: plsql
1.
2.
3.
4.
5.
6.
CREATE TABLE my_contacts
(
contact_id int(11) NOT NULL AUTO_INCREMENT,
interests varchar(100) DEFAULT NULL,
PRIMARY KEY (contact_id)
); 



с неатомарным столбцом interests в котором данные перечислены через запятую:

contact_id interests1 acting, dancing2 fishing, drinking

Соединительная таблица:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
create table conract_interest
(
 interest_id int not null,
 contact_id int not null,
 foreign key (contact_id)
 references my_contacts(contact_id)
);



Код: plsql
1.
2.
3.
4.
5.
6.
7.
create table interests
(
interest_id int not null,
interest varchar(50) not null,
foreign key (interest_id)
references conract_interest(interest_id) 
)



И проблема в том что я непонимаю как перенести данные из столбца interests и столбца contact_id в таблицы conract_interest и interests так чтобы не потерялась связанность записей да и к тому же разделить значения чтобы в одном кортеже был только один интерес(ну привести в нормальную форму)
...
Рейтинг: 0 / 0
11.12.2015, 09:01
    #39125519
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных из таблицы с одним НЕ атомарным столбцом в другую таблицу
Потребуется опорная таблица с количеством записей не менее максимального количества индивидуальных значений в поле interests. Её умножить на исходную и, ориентируясь на значение номера записи в ней, выделять соотв. отдельное значение. Записи, где оно непусто, вставлять в целевые таблицы.
...
Рейтинг: 0 / 0
11.12.2015, 14:45
    #39125878
Lord_Sota_Sil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных из таблицы с одним НЕ атомарным столбцом в другую таблицу
AkinaПотребуется опорная таблица с количеством записей не менее максимального количества индивидуальных значений в поле interests. Её умножить на исходную и, ориентируясь на значение номера записи в ней, выделять соотв. отдельное значение. Записи, где оно непусто, вставлять в целевые таблицы.

пожалуйста не могли бы вы это выразить в SQL коде
...
Рейтинг: 0 / 0
11.12.2015, 15:36
    #39125937
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных из таблицы с одним НЕ атомарным столбцом в другую таблицу
Ну типа
Код: sql
1.
2.
3.
SELECT m.contact_id, TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(m.interests,',',n.num),',',-1)) interest
FROM my_contacts m, (SELECT 1 num UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) n
WHERE LENGTH(m.interests)-LENGTH(REPLACE(m.interests,',',''))+2 > n.num

А дальше разберёшься.
...
Рейтинг: 0 / 0
11.12.2015, 16:48
    #39126005
Lord_Sota_Sil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных из таблицы с одним НЕ атомарным столбцом в другую таблицу
Akina,

Жесть вот это запросик :-) большое спасибо!
С функциями извлечения подстроки до разделителя запятой и им подобные я понимаю, а вот подзапрос
Код: plsql
1.
(SELECT 1 num UNION SELECT 2 UNION SELECT 3 UNION SELECT 4)


и далее..
Вообще вкурить не могу, пожалуйста обьясните как он действует и всю остальную магию с тем как оно получается что Id не теряются, а дублируясь присваиваются тем же интересам что и были...
...
Рейтинг: 0 / 0
11.12.2015, 19:09
    #39126165
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных из таблицы с одним НЕ атомарным столбцом в другую таблицу
Lord_Sota_Sil,

так выполните этот запрос отдельно - увидите просто 1 столбец 4 записи, т.е. это сгенерированная табличка с 4-мя записями
...
Рейтинг: 0 / 0
12.12.2015, 14:50
    #39126387
Lord_Sota_Sil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных из таблицы с одним НЕ атомарным столбцом в другую таблицу
Alex_UstinovLord_Sota_Sil,

так выполните этот запрос отдельно - увидите просто 1 столбец 4 записи, т.е. это сгенерированная табличка с 4-мя записями
И как мне это поможет понять смысл всего запроса? Это будут просто выдранные слова из контекста
...
Рейтинг: 0 / 0
12.12.2015, 20:59
    #39126513
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных из таблицы с одним НЕ атомарным столбцом в другую таблицу
Хочешь понять смысл? Выполни вот такой запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT
  m.contact_id
, m.interests
, n.num
, TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(m.interests,',',n.num),',',-1)) interest
, LENGTH(m.interests) len1
, REPLACE(m.interests,',','') 
, LENGTH(REPLACE(m.interests,',','') len2
FROM
  my_contacts m
, (SELECT 1 num UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) n


и проанализируй, соотнося с исходным запросом.
...
Рейтинг: 0 / 0
12.12.2015, 23:19
    #39126538
Lord_Sota_Sil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных из таблицы с одним НЕ атомарным столбцом в другую таблицу
Akina,
Я запутался ещё сильнее, в запросе что вы дали писало ошибку мол не хватает скобки возле len2 исправил как понял правильно или нет - заработало, но в итоговой таблице был столбец со странным названием REPLACE(m.interests, ',', '')
В итоге появилась такая табличка:



Как я не ломал голову всё равно не могу понять вашей фишки с UNION как они работают? и почему их 4 ? и почему например интерес drinking повторяется 3 раза? да и вообще остальные интересы состоящие из одного слова дублируются по 4 раза...
столбцы len1 и len2 понятно что различаются на количество запятых
...
Рейтинг: 0 / 0
14.12.2015, 11:09
    #39127068
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных из таблицы с одним НЕ атомарным столбцом в другую таблицу
Lord_Sota_Sil, это читали?
...
Рейтинг: 0 / 0
14.12.2015, 14:23
    #39127337
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных из таблицы с одним НЕ атомарным столбцом в другую таблицу
Lord_Sota_SilAkinaПотребуется опорная таблица с количеством записей не менее максимального количества индивидуальных значений в поле interests. Её умножить на исходную и, ориентируясь на значение номера записи в ней, выделять соотв. отдельное значение. Записи, где оно непусто, вставлять в целевые таблицы.

пожалуйста не могли бы вы это выразить в SQL коде

Так нельзя это на SQL написать, нужен цикл по значениям в каждом поле.
Это либо скрипт надо писать, либо -- процедуру.
Внешний цикл по курсору на таблицу,
вложенный -- по значениям в неатомарном поле.
В тебе -- вставка записи в новую таблицу.
...
Рейтинг: 0 / 0
16.12.2015, 07:24
    #39129325
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных из таблицы с одним НЕ атомарным столбцом в другую таблицу
MasterZivТак нельзя это на SQL написать Да ну? Там, правда, инты, но суть-то от этого не меняется.
...
Рейтинг: 0 / 0
23.12.2015, 20:51
    #39136545
Lord_Sota_Sil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных из таблицы с одним НЕ атомарным столбцом в другую таблицу
т.к. с SQL знаком недавно....подскажите а как из временной таблицы вщять все эти записи и вставить в другую таблицу?
...
Рейтинг: 0 / 0
23.12.2015, 21:05
    #39136555
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных из таблицы с одним НЕ атомарным столбцом в другую таблицу
Lord_Sota_Silкак из временной таблицы ... все ... записи ... вставить в другую таблицу
http://dev.mysql.com/doc/refman/5.6/en/insert-select.html
...
Рейтинг: 0 / 0
23.12.2015, 23:05
    #39136604
mini.weblab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос данных из таблицы с одним НЕ атомарным столбцом в другую таблицу
Lord_Sota_Sil,

у меня в книге похожий пример приводится в теме по нормализации БД.

если с нормализацией разбираетесь, то пропущенным шагом будет представление 1НФ
(contact_id, interest_id, interest)

дальше из 1НФ получаем таблицы 2 и 3
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Перенос данных из таблицы с одним НЕ атомарным столбцом в другую таблицу / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]