3

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

我有两张桌子(大师,回应)

我需要遍历 Responses 表,使用其 Master_Id 字段在 Master 表 (id) 中查找它以匹配记录,并使用 Responses 表中的日期字段更新 Master 表中的日期字段

这可以在 SQL 中完成,还是我实际上必须创建两个 TTables 或 TQueries 并逐步遍历每条记录?

例子:

打开两个表(Table1,Table2)

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;  

谢谢

4

2 回答 2

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 来自哪个表。这不是现成的,可复制粘贴的查询,因为 UPDATE 语法因数据库而异。您可能需要查阅数据库 sql 参考以了解 UPDATE 语句语法中的 JOIN。

当对同一个主条目有多个响应时

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 Complete 参考

于 2011-02-08T18:16:40.800 回答
0

试试这个 SQL(更改名称以适应您的情况)

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

于 2011-02-08T18:09:57.920 回答