Определение лучшего метода для обхода таблицы и обновления другой таблицы

Я использую Delphi 7, BDE и Interbase (тестирование), Oracle (Production).

У меня есть две таблицы (мастер, ответы)

Мне нужно пройтись по таблице ответов, использовать ее поле Master_Id, чтобы найти ее в главной таблице (id) для сопоставления записи и обновить поле даты в основной таблице с полем даты в таблице ответов

Можно ли это сделать в SQL или мне действительно нужно создать две таблицы TTable или TQueries и пройти по каждой записи?

Пример:

Откройте две таблицы (Таблица1, Таблица2)

with Table1 do
begin
 first;
 while not EOF do
 begin
  //get master_id field
  //locate in id field in table 2
  //edit record in table 2
  next;
 end;
end;  

Спасибо

2 ответа

Решение

Одна небольшая модификация запроса Криса, добавьте предложение where, чтобы выбрать только те записи, которые требуют обновления. В противном случае он установит остальные даты в NULL.

UPDATE Master m
SET 
    m.date = (SELECT r.date FROM Reponses r WHERE r.master_id = m.id) 
WHERE m.id IN (SELECT master_id FROM Responses)

Обновлен, чтобы использовать псевдонимы, чтобы избежать путаницы, какой столбец приходит с какой таблицы. Это не готовый, копируемый, доступный для запроса запрос, поскольку синтаксис UPDATE отличается от базы данных к базе данных. Возможно, вам понадобится обратиться к SQL-ссылке вашей базы данных для JOIN в синтаксисе оператора UPDATE.

Когда есть несколько ответов на одну и ту же основную запись

UPDATE Master m 
SET      m.date = (
    SELECT MAX(r.date) FROM Reponses r WHERE r.master_id = m.id)  
WHERE m.id IN (SELECT master_id FROM Responses) 

Я использовал MAX(), вы можете использовать все, что подходит для вашего бизнеса. Опять потратить некоторое время на понимание SQL. Это едва ли несколько дней усилий. Получить ссылку на PLSQL Complete, если вы в Oracle

Попробуйте этот SQL (изменение имен в соответствии с вашей ситуацией)

ОБНОВЛЕНИЕ Мастер m УСТАНОВИТЬ дату = (ВЫБЕРИТЕ дату ОТ ОТВЕТОВ ГДЕ id = m.id)

Другие вопросы по тегам