确定遍历表并更新另一个表的最佳方法

时间:2011-02-08 18:05:46

标签: sql delphi delphi-7 bde

我正在使用Delphi 7,BDE和Interbase(测试),Oracle(生产)。

我有两张桌子(主人,回应)

我需要逐步执行Responses表,使用其Master_Id字段在Master表(id)中查找匹配记录,并使用Responses表中的日期字段更新Master表中的日期字段

这可以在SQL中完成,还是我实际上必须创建两个TTables或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 个答案:

答案 0 :(得分:2)

对Chris'查询稍作修改,抛出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)

更新为使用别名以避免混淆哪个col来自哪个表。 这不是现成的,copy-past'able查询作为UPDATE语法因数据库而异。 您可能需要在UPDATE语句语法中查询JOIN的数据库sql参考。

当对同一主条目有多个回复时

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。它几乎没有几天的努力。如果您使用Oracle,请获取PLSQL完整参考

答案 1 :(得分:0)

尝试此SQL(更改名称以适合您的情况)

UPDATE Master m   SET date =(SELECT date FROM Responses WHERE id = m.id)