我正在使用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;
感谢
答案 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)