Как объединить две таблицы в MySQL и где таблица 1 является основной - PullRequest
1 голос
/ 08 июня 2011

Как мне объединить две таблицы в MySQL? Я просмотрел несколько других сообщений на эту тему, но они не достаточно подробно для меня.

Я начинающий пользователь MySQL, поэтому потерпите меня, у меня есть первичная таблица и временная таблица, которые выглядят так:

CREATE TABLE temp_import (id int (11) NOT NULL auto_increment,
Name varchar (255) по умолчанию NULL,
MerchantID int (11) по умолчанию NULL,
SKU varchar (255) по умолчанию NULL,
ПЕРВИЧНЫЙ КЛЮЧ (id)) ДВИГАТЕЛЬ = MyISAM AUTO_INCREMENT = 765811 ПО УМОЛЧАНИЮ CHARSET = utf8;

Я вставляю данные во временную таблицу следующим образом:

LOAD DATA LOCAL INFILE \'29762.txt\' REPLACE INTO TABLE temp_import FIELDS TERMINATED BY \'|\' OPTIONALLY ENCLOSED BY \'"\' LINES TERMINATED BY \'\n\' (Name, MerchantID, SKU);

Формат каждой таблицы одинаков, но данные со временем меняются. Некоторые позиции данные шансы, но SKU остается неизменным. Некоторые предметы больше не будут предлагаться и должны быть удалены из базы данных.

пример:

Текущая таблица базы данных:

1, dog, 101, dog101
2, cat, 101, cat101
3, chicken, 102, chicken100
4, chicken food, 102, chicken101

Новая таблица базы данных:

1, dog, 101, dog101
2, cat, 102, cat101
3, chicken, 102, chicken100
5, Frog, 103, frog101

Окончательный результат должен быть

1, dog, 101, dog101
2, cat, 102, cat101
3, chicken, 102, chicken100
5, Frog, 103, frog101

Удалена куриная еда, добавлена ​​лягушка, обновлен кот.

Также это должно быть максимально эффективно. Я буду работать с некоторыми огромными файлами. И это может быть только MySQL код.

http://www.xaprb.com/blog/2006/02/21/flexible-insert-and-update-in-mysql/ Я посмотрел через это, но это над моей головой, когда я пытаюсь это сделать, это не работает ...

Ответы [ 3 ]

0 голосов
/ 08 июня 2011

Не уверен, что это будет соответствовать вашим потребностям, но, возможно, вам понадобится просмотр для ваших данных.

Представление базы данных известно как «виртуальная таблица», которая позволяет запрашивать данные в ней.

Вы можете найти отличную информацию о просмотрах прямо здесь .Надеюсь, это поможет, просмотры очень мощные, и их стоит рассмотреть, когда вам нужно другое представление ваших данных.

0 голосов
/ 29 марта 2012

Я думал, что выложу то, что в конце концов использовал для этого.Это, вероятно, не лучший способ, и удаление столбца совершенно необязательно.

ALTER TABLE `temp_import`
ADD `deleteme` tinyint NOT NULL
DEFAULT 0; -- If you haven't already added a deleteme column 


UPDATE `temp_import` SET  `deleteme` = 1; -- Set the delete field 

LOAD DATA LOW_PRIORITY LOCAL INFILE "import.csv" REPLACE INTO TABLE `temp_import`  FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY """" LINES TERMINATED BY "\n"  IGNORE 1 LINES (`id`, `name`, `m_id`, `sku`);

DELETE FROM `temp_import` WHERE  `deleteme` = 1;

ALTER TABLE `tests` DROP COLUMN `deleteme` -- Optional
0 голосов
/ 08 июня 2011

Вместо этого сделайте SKU первичным ключом. Оттуда вы можете просто сделать запрос INSERT ... SELECT ... ON DUPLICATE KEY UPDATE.

...