2014-06-11 5 views
0

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

У меня есть следующая таблица:

Act (
    id INT NOT NULL AUTO_INCREMENT, 
    type VARCHAR(20), 
    Act_date DATETIME, 
    place VARCHAR(20) 
); 

где тип имеет 2 возможных значения: "рождение" и "смерть". Все столбцы уже заполнены. Теперь я пытаюсь сделать процедуру или функцию, которая рассчитала бы разницу между Актами типа «рождение» и действиями типа «смерть» в течение заданного времени и поместила результаты в другую таблицу, например:

Population_Growth(
    id INT NOT NULL AUTO_INCREMENT, 
    time DATE, 
    place VARCHAR(20), 
    result INT 
); 

, где результат будет разница между актами типа «рождения» и актов «смерти» типа

Я был бы признателен за любую помощь.

+2

Вы можете сделать INSERT INTO ... SELECT FROM в одном запросе. – Devon

+3

У вас уже есть инструкция SELECT? Кроме того, просто думая, но я не получаю поле ID в Act. Как вы определяете, какие две строки идут вместе? Должен ли идентификатор быть одинаковым для рождения и смерти, а не для автоматического приращения? Возможно, имеет смысл иметь дату рождения и дату смерти вместо одного поля даты и двух строк. – Devon

+0

Я думал о чем-то вроде: INSERT INTO Population_Growth (id, time, place, result) VALUES ((SELECT Act_date FROM Act), (SELECT time FROM Act), (SELECT place FROM Act), ((SELECT COUNT (id) FROM Act WHERE type = "birth") - (SELECT COUNT (id) FROM Act WHERE type = "death") –

ответ

1

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

Act (
    id INT NOT NULL AUTO_INCREMENT, 
    birth_date DATETIME, 
    death_date DATETIME, 
    place VARCHAR(20) 
); 

    Population_Growth(
    id INT NOT NULL, 
    result INT 
); 

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

Затем вы можете сделать вставку, используя информацию из таблицы Act. TIMESTAMPDIFF вернет целое число разницы между двумя датами. Я не уверен, нужны ли вам годы, месяцы, секунды и т. Д.

INSERT INTO Population_Growth 
SELECT id, TIMESTAMPDIFF(YEAR, death_date, birth_date) FROM Act 
WHERE death_date IS NOT NULL AND birth_date IS NOT NULL; 
Смежные вопросы