У меня есть две таблицы: t1
и t2
- t2
имеет только один столбец с именем stuff
(60.000 записей).
- t1
имеет 15 столбцов, включая stuff
(пусто). t1
имеет около 650 000 записей.Mysql один столбец таблицы -> вставить в другой таблице
Как я могу импортировать данные из t2.stuff
в t1.stuff
, когда мне нечего совместить? (Я просто хочу заполнить пустые поля t1.stuff
данными от t2.stuff
и не заботятся о соответствующих идентификаторах или что-то еще.)
Самый лучший случай (я думаю), будет, если я запустил этот запрос около 11 раз, все поля t1.stuff
будут заполнены, потому что не осталось пустого поля в t1.stuff
.
Вот пример того, что таблицы выглядит следующим образом:
t1
:
|__a___|_b_|_c_|stuff|...|
|___308|foo|bar|_____|baz|
|___312|foo|bar|_____|baz|
...
|655578|foo|bar|_____|baz|
t2
:
|___stuff___|
|some_info_1|
|some_info_2|
...
|some_info_n|
Может быть, есть несколько шагов, необходимых ...
UPDATE
Вот это РЕШЕНИЕ I жировик t с в случае, если кто-то имеет схожую проблему - Все кредиты заходят к пользователю nurdglaw для указания меня в правильном направлении. Так вот мы идем:
Добавить новый столбец в таблицу в вопросе заселенного с номерами автоинкремента (я установил
alter table t1 auto_increment = 1
и временно отключен автоинкремент на моем первичном ключе, чтобы избежать ошибок с этим кодом)ALTER TABLE t1 ADD COLUMN new_column INTEGER UNIQUE AUTO_INCREMENT;
Сделал то же самое для t2.Если вы уже не имеете вторую таблицу, вы можете сделать что-то вроде этого:
CREATE TABLE t2 (id INTEGER PRIMARY KEY AUTO_INCREMENT,t2_data_column VARCHAR(255));
< - регулировать количество ваших потребностей
и импортировать данные с:
LOAD DATA LOCAL INFILE 'path_on_your_server/data_file.csv'
INTO TABLE t2
LINES TERMINATED BY '\r\n'
< - настройка к вашему LineBreak нужно
(t2_data_column)
Теперь, когда у вас есть что-то, чтобы соответствовать против, вы можете
INNER JOIN
t1
сt2
, выполнив следующие действия: Добавить данные изt2
вt1
UPDATE t1 AS s
JOIN t2 AS t ON t.id=s.new_column
SET s.stuff=t.t2_data_column;
< -stuff
была колонна вt1
Я хотел, чтобы импортировать данные.- Убирать бардак
DROP TABLE t2;
ALTER TABLE t1 DROP COLUMN new_column;
Включить автоинкрементного на ваш первичный ключ снова и установить его на число, которое необходимо для новых строк, если вы использовали один раньше.
Все, все готово!
Еще одно примечание. Я решил настроить автономные данные и импортировать 650 000 записей, необходимых для этого метода за один раз, вместо того, чтобы делать это только с 60 000, которые я поставил в первоначальном вопросе. Но вы получите идею сделать это с любым количеством данных и сопоставить их с тем, что вам нужно.
Пух, я действительно пытался понять ваш ответ, но я не могу полностью следовать (я знаю, что я noob, в основном используется phpmyadmin для манипуляции с базами данных до сих пор ...). Что вы понимаете под уникальным ключом к строке в t1? Если вы имеете в виду первичный ключ в каждой строке, его автоинкрементные числа, такие как те, которые я помещаю в столбец 'a'. (Подчерки представляют «ничего» (пробел) на графике). Эти значения не просто начинаются с '1',' 2' и т. Д., Потому что многие строки нужно время от времени удалять. 't2' не имеет ничего подобного. Данные 't2' содержат чистый текст, импортированный из файла csv. –
yes, первичный ключ является уникальным ключом, поэтому вы можете использовать a в приведенном выше выражении вместо a__, чтобы получить удержание для каждой отдельной строки – sqlab
, вы, вероятно, можете достичь своего желания с помощью чистого mysql, используя курсоры и заданные операции, но я думаю, это будет сложнее получить – sqlab