Вертикальное объединение нескольких таблиц в MySQL по объединенному первичному ключу - PullRequest
0 голосов
/ 13 мая 2010

У меня есть 3 MySQL таблицы MySQL: table1, table2 и table3. Каждая таблица имеет столбец идентификаторов (ID, ID2, ID3 соответственно) и разные столбцы данных.

Например, таблица1 имеет столбцы [ID, имя, день рождения, статус, ...],
Таблица2 имеет [ID2, Страна, Zip, ...],
Таблица3 имеет [ID3, источник, телефон, ...]
Вы поняли.

Столбцы ID, ID2, ID3 являются общими для всех трех таблиц ... если в table1 есть значение идентификатора, оно также появится в table2 и table3. Количество строк в этих таблицах одинаковое, около 10 м строк в каждой таблице.

Что я хотел бы сделать, это создать новую таблицу, которая содержит (большинство) столбцов всех трех таблиц и объединить их в нее. Например, даты должны быть конвертированы, потому что сейчас они находятся в формате VARCHAR YYYYMMDD. Читая руководство по MySQL, я подумал, что STR_TO_DATE () справится с этой задачей, но я не знаю, как написать сам запрос, поэтому не знаю, как интегрировать преобразование даты.

Итак, после создания новой таблицы (которую я знаю, как это сделать), как я могу объединить в нее три таблицы, интегрировав в запрос преобразование даты?

Обновление:

Единственное, что мне неясно, это как я могу конвертировать даты в запросе. Насколько я понимаю, запрос должен выглядеть примерно так:

INSERT INTO [new table] 
SELECT table1.ID, table1.Name, table1.Birthday, table2.Country, table3.Phone
FROM table1 
INNER JOIN table2 ON table1.ID = table2.ID2 
INNER JOIN table3 ON table1.ID = table3.ID3;

... но как я могу конвертировать даты в нем? Или в этом отношении применить любую функцию к полю, прежде чем оно будет вставлено? Например, как я могу преобразовать поле «День рождения» перед тем, как вставить его с помощью STR_TO_DATE ()? Куда я это положу?

STR_TO_DATE(table1.Birthday, '%Y%m%d')

[Ошибка, которую я решил просто заменить "table1.Birthday" на "STR_TO_DATE (table1.Birthday, ...)"? Это правильно?]

1 Ответ

1 голос
/ 13 мая 2010

Похоже, что вы хотите запрос INSERT SELECT в соответствии с:

INSERT INTO [new table] 
SELECT [values] 
FROM table1 
INNER JOIN table2 on table1.ID = table2.ID2 
INNER JOIN table3 ON table1.ID = table3.ID3;

Где вы вводите [new table] в качестве имени новой таблицы и [values] в качестве значений, которые вы хотите в новой таблице.

Вот соответствующие части руководства для более подробной информации.

...