powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Заполнить таблицу Т1 данными из таблицы Т2 по условию
13 сообщений из 13, страница 1 из 1
Заполнить таблицу Т1 данными из таблицы Т2 по условию
    #39200070
michail_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Для работы использую dbForge Studio for MySQL, БД локальная на моем новом ноутбуке Core i5
есть несколько таблиц, но пример на основе 2 таблиц, так как он тоже не работает.

Таблица 1 = заполнено только поле Time - это время (это как бы ID), в таблице 3 млн. строк

CREATE TABLE auto.tmp_all (
Time decimal(20, 2) DEFAULT NULL,
x decimal(20, 5) DEFAULT NULL,
y decimal(20, 5) DEFAULT NULL,
z decimal(20, 5) DEFAULT NULL,
g decimal(20, 5) DEFAULT NULL,
noise decimal(20, 3) DEFAULT NULL)

Таблица 2 = заполнены все поля, в таблице 2 млн. строк
CREATE TABLE auto.andro (
Time decimal(20, 2) DEFAULT NULL,
x decimal(20, 5) DEFAULT NULL,
y decimal(20, 5) DEFAULT NULL,
z decimal(20, 5) DEFAULT NULL,
g decimal(20, 5) DEFAULT NULL,
noise decimal(20, 3) DEFAULT NULL)

Задача: Обновить все поля в Таблице1 данными из Таблицы 2 при условие что поле Time совпадает

Что я пробовал (все сводится к тому что запросы просто не выполняются - я ждал по 2 часа и ничего (( ):
1)

Код: sql
1.
2.
3.
Update tmp_all t inner join andro t1 on t.Time = t1.Time
  SET t.y = t1.y, t.z = t1.z, t.g = t1.g, t.noise = t1.noise
  Where t.Time = t1.Time



Вообщем не знаю возможно ли решить мою задачу - прошу подсказать, а то может я зря теряю время, спасибо.
...
Рейтинг: 0 / 0
Заполнить таблицу Т1 данными из таблицы Т2 по условию
    #39200089
michail_s
Код: sql
1.
2.
3.
Update tmp_all t inner join andro t1 on t.Time = t1.Time
  SET t.y = t1.y, t.z = t1.z, t.g = t1.g, t.noise = t1.noise
  Where t.Time = t1.Time

какое-то у тебя масло-масленое получилось...
...
Рейтинг: 0 / 0
Заполнить таблицу Т1 данными из таблицы Т2 по условию
    #39200090
michail_sвсе сводится к тому что запросы просто не выполняются - я ждал по 2 часа и ничего ((выдается сообщение об ошибке? или не дождался окончания выполнения операции?
...
Рейтинг: 0 / 0
Заполнить таблицу Т1 данными из таблицы Т2 по условию
    #39200153
michail_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх,

Ошибки не выдается, просто висит что выполняется и все на этом ..., ждал 2 часа - потом остановил.
Если делать запрос через MySQLWorkbench, то через 600 сек. выдается разрыв соединения, но ноутбук продолжает "шуметь", предполагаю, что запрос продолжает обрабатываться - хотя не знаю точно
...
Рейтинг: 0 / 0
Заполнить таблицу Т1 данными из таблицы Т2 по условию
    #39200158
michail_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изначально пробовал такой запрос:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE TABLE tmp_all
  select ids.Time, andro.x, y, z, noise, androacc.speedms, acc
  from 
  (
    select Time
      from andro
    union
    select Time
      from androacc
	  ) ids
  left join andro
    on ids.Time = andro.Time
  left join androacc
    on ids.Time = androacc.Time
  



но тоже не дождаться когда обработается,
Поэтому решил сначала все время Time добавить в одну таблицу, а потом в нее данные из остальных таблиц загружать

какое-то у тебя масло-масленое получилось...
Попробовал без Where t.Time = t1.Time, но тоже никак не дождаться окончания выполнения запроса ((
...
Рейтинг: 0 / 0
Заполнить таблицу Т1 данными из таблицы Т2 по условию
    #39200170
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
michail_sДобрый день!

Для работы использую dbForge Studio for MySQL, БД локальная на моем новом ноутбуке Core i5
есть несколько таблиц, но пример на основе 2 таблиц, так как он тоже не работает.

Таблица 1 = заполнено только поле Time - это время (это как бы ID), в таблице 3 млн. строк

CREATE TABLE auto.tmp_all (
Time decimal(20, 2) DEFAULT NULL,
x decimal(20, 5) DEFAULT NULL,
y decimal(20, 5) DEFAULT NULL,
z decimal(20, 5) DEFAULT NULL,
g decimal(20, 5) DEFAULT NULL,
noise decimal(20, 3) DEFAULT NULL)

Таблица 2 = заполнены все поля, в таблице 2 млн. строк
CREATE TABLE auto.andro (
Time decimal(20, 2) DEFAULT NULL,
x decimal(20, 5) DEFAULT NULL,
y decimal(20, 5) DEFAULT NULL,
z decimal(20, 5) DEFAULT NULL,
g decimal(20, 5) DEFAULT NULL,
noise decimal(20, 3) DEFAULT NULL)

Задача: Обновить все поля в Таблице1 данными из Таблицы 2 при условие что поле Time совпадает

Что я пробовал (все сводится к тому что запросы просто не выполняются - я ждал по 2 часа и ничего (( ):
1)

Код: sql
1.
2.
3.
Update tmp_all t inner join andro t1 on t.Time = t1.Time
  SET t.y = t1.y, t.z = t1.z, t.g = t1.g, t.noise = t1.noise
  Where t.Time = t1.Time




Вообщем не знаю возможно ли решить мою задачу - прошу подсказать, а то может я зря теряю время, спасибо.



EXPLAIN, DESC <table_name>, count(1) таблиц....

МикСофт, ФАК бы какойнибудь сделать по задаванию вопросов :-)
Кажется у форума по СКЛ Сервер был такой...


michail_s ... начните замерять время с милиона на 100, потом на 10000, потом на 100К...
просто чтоб не мучатся а отлаживать на разумных часах...
...
Рейтинг: 0 / 0
Заполнить таблицу Т1 данными из таблицы Т2 по условию
    #39200236
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbcМикСофт, ФАК бы какойнибудь сделать по задаванию вопросов :-)
Кажется у форума по СКЛ Сервер был такой...Уже есть. Например, тут Правила -->Рекомендации. Вот только кто бы ещё всё это читал...
...
Рейтинг: 0 / 0
Заполнить таблицу Т1 данными из таблицы Т2 по условию
    #39200304
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
michail_sждал по 2 часа и ничего
Сначала удалите записи из Т1, имеющие соответствие в Т2. Потом безусловно вставьте записи из Т2 в Т1. Это будет гораздо быстрее.
Ну или хотя бы создайте индексы по полю Time и объявите уникальными (а то и первичными). Ещё было бы очень мудро поле переименовать - использование зарезервированных слов как-то не комильфо...
...
Рейтинг: 0 / 0
Заполнить таблицу Т1 данными из таблицы Т2 по условию
    #39200864
michail_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо все за наводки.
Вот что сделал:

Попробовал запрос из первого поста (Попробовал только Select, а не Update) с 2.8 млн на 160 строк - обработался за 1 мин.
2.8 мин. на 700 строк обработался за 5 мин.
Вывод, если нужно обработать 70К строк, то времени нужно 500 мин. - не очень хорошо.

--------------------------------------
Опишу все с самого начала ))

Прикрепил изображения какие таблицы у меня есть в БД и сколько в каждой таблице записей.
Может я выбрал не правильный метод реализации.
Задача в следующем:
Поле Time - частично пересекается во всех таблицах, т.е. определенное значение столбца Time - может присутствовать в разных таблицах. Физицеский смысл поля Time - это время в формате Unix, поэтому оно и может повторяться в разных таблицах.
Цель:
Нужно все данные из этих таблиц объединить в одну.
Т.е. будет только один столбец Time (т.к. он единственный повторяется во всех таблицах) и далее столбцы заполненные данными из отдельных таблиц. Далее из этой общей таблицы я буду делать Select-ы по нужным условиям.

Дайте наводку как это лучше реализовать или вообще реализовать?

То что я попробовал под сполером
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select ids.Time, f_screen.value, hrv.rr, hr
  from 
  (
    select Time
      from f_screen
    union
    select Time
      from hrv
    ) ids
  left join f_screen
    on ids.Time = f_screen.Time
  left join hrv
    on ids.Time = hrv.Time


этот запрос выполнился за 30 мин.
...
Рейтинг: 0 / 0
Заполнить таблицу Т1 данными из таблицы Т2 по условию
    #39200899
michail_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас поле Time пытаюсь сделать во всех таблицах как Primery key
с которыми уже получилось - запрос стал обрабатываться на много быстрее.

Сейчас другая проблема возникла - в таблице в которой 2 млн. записей есть дубли по столбцу Time, из-за этого не дает назначить как Primery key.

Пока использую такой запрос для поиска дублей

Код: sql
1.
select * from andro where Time IN (select Time from andro GROUP BY Time HAVING COUNT(Time)>1) order by Time;



... но уже долго выполняется ... попытаюсь пока так.
Но если у кого-то будут идеи по улучшению - буду признателен.
...
Рейтинг: 0 / 0
Заполнить таблицу Т1 данными из таблицы Т2 по условию
    #39200934
michail_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообщем теперь вопрос:

как удалить из таблицы в 2 млн. строки по дублям для одного столбца Time (которое не является первичным), т.е. если в столбце Time есть дубль, то удаляем эту строку.
Спасибо
...
Рейтинг: 0 / 0
Заполнить таблицу Т1 данными из таблицы Т2 по условию
    #39204007
michail_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообщем все получилось вроде:

от дублей избавился таким запросом:
Код: sql
1.
Create TABLE gar SELECT * FROM gar1 GROUP BY Time


Т.е. если по столбцу Time были дубли, то они удалились

Поле Time назначил первичным ключом - видимо это и было проблемой со скоростью выполнения запроса))
Далее в одном запросе вставил все время в одну таблицу и сделал Left Join всех таблиц
В итоге получил таблицу с почти 3 млн. строк, запрос выполнился за 5 мин. - ОК
Всем спасибо

Может кому пригодится
...
Рейтинг: 0 / 0
Заполнить таблицу Т1 данными из таблицы Т2 по условию
    #39204049
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
michail_sесли по столбцу Time были дубли, то они удалились
Но вот загадка - какие значения легли в остальные поля, кроме поля группировки Time? Согласно документации - случайные из группы... более того - документация не гарантирует даже, что они взяты из одной и той же записи!
Так что предположение, что
michail_sМожет кому пригодится
я бы назвал весьма самонадеянным... а совет следовать тем же путём считаю безусловно "вредным советом".
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Заполнить таблицу Т1 данными из таблицы Т2 по условию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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