2015-05-29 2 views
0

У меня есть две таблицы device_test_results и devices.данные обновления в таблице из таблицы, привязанной к FK

device_test_results 
- id 
- device_id (FK) 
- brand 
- model 
- serial_number 

devices 
- id 
- brand 
- model 
- serial_number 

device_test_results имеет внешний ключ - device_id, что ссылки на devices таблицы

Это было некоторое время, так как я использовал эту установку и есть много данных, что ссылки с device_test_results на devices.

Я в настоящее время пытаюсь избавиться от этой зависимости, так что я добавил brandmodel и serial_number столбцов в device_test_results скопировать все, что имеющуюся информацию из devices таблицы, а затем удалить это ограничение, так что эти 2 таблиц становятся независимыми.

Любые предложения или места для поиска решения для этого?

+0

Почему вы хотите, чтобы удалить эту зависимость? Сохранение информации об устройстве в одном месте гарантирует ссылочную целостность, то есть правильность значений. –

+0

Мне кажется, что использование таблицы устройств больше похоже на конфигурационную информацию для моего скрипта, а не на таблицу, на которую ссылаются, и теперь я не могу изменить какую-либо информацию на ней. На устройство по-прежнему можно ссылаться на серийный номер, который будет сохранен в device_test_results, поэтому, если я действительно хочу ссылаться на некоторую информацию, я все еще могу это сделать, также я все равно сохраняю всю необходимую информацию в device_test_results. Как вы думаете? – sylvian

ответ

1

Вы должны попробовать что-то вроде ниже. Получите требуемые данные с помощью запроса SELECT и JOIN с другой таблицей, а затем выполните операцию INSERT соответственно.

INSERT INTO device_test_results (brand, model, serial_number) 
SELECT * FROM 
(
SELECT d.brand, d.model, d.serial_number 
from devices d 
inner join device_test_results dtr on dtr.device_id = d.id 
) tab 

EDIT:

Затем используйте UPDATE запрос делает JOIN с другой таблицей, как

UPDATE device_test_results AS dtr 
SET brand = d.brand 
model = d.model 
serial_number = d.serial_number 
FROM devices AS d 
WHERE dtr.device_id = d.id; 
+0

Спасибо Рахул, это сработало, но я только понял, что задал вопрос неправильно. Мне нужно обновить все строки в device_test_results с помощью указанной информации с устройств. Оператор insert просто добавляет новые строки со всей информацией из таблицы устройств. – sylvian

+0

Большое спасибо, это действительно помогло! – sylvian

Смежные вопросы