Определение лучшего метода для обхода таблицы и обновления другой таблицы - PullRequest
3 голосов
/ 08 февраля 2011

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

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

Мне нужно пройтись по таблице Responses, использовать ее поле Master_Id, чтобы найти ее в Master table (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 ]

2 голосов
/ 08 февраля 2011

Одна небольшая модификация запроса Криса, добавьте предложение 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

0 голосов
/ 08 февраля 2011

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

ОБНОВЛЕНИЕ Мастер м SET date = (ВЫБЕРИТЕ дату ИЗ ОТВЕТОВ, ГДЕ id = m.id)

...