我是Oracle SQL的新手,在编写以下查询时需要一些帮助。任何指导将不胜感激。我不确定我是否会沿着正确的道路走下去。
我有两个表t1和t2。 t1包含四个字段f1 ... f4。 t2包含相同的四个字段。我需要分别用t2.f1和t2.f4的值更新t1.f1和t1.f4,其中t1.f2 = t2.f2和t1.f3 = t2.f3。如果存在与这些条件不匹配的行,则不应更新该行。
我是在正确的道路上还是完全失去了?
UPDATE t1
SET (t1.f1=t2.f1,
t1.f4=t2.f4)
FROM t1
INNER JOIN (SELECT t2.f1, t2.f4 FROM t2)
ON t1.f2=t2.f2 AND t1.f3=t2.f3
WHERE EXISTS (SELECT t2.f1, t2.f4
FROM t2
WHERE t1.f2=t2.f2 AND t1.f3=t2.f3);
答案 0 :(得分:0)
如果使用MERGE语句,可能会更容易。类似的东西:
MERGE INTO t1 使用 (SELECT f1,f2,f3,f4 FROM t2)t2 上 (t1.f2 = t2.f2 AND t1.f3 = t2.f3) 当匹配时 更新集t1.f1 = t2.f1, t1.f4 = t2.f4;
答案 1 :(得分:0)
如果您使用的是Oracle 9i或更高版本,则“MERGE”是最好的方法。
或者你可以像这样重写上面的查询
UPDATE table1 t1
SET (t1.f1,t1.f2) = (
select t2.f1,t2.f4 from table2 t2
where t1.f2 = t2.f2 and t1.f3 = t2.f3)
WHERE EXISTS (SELECT 1
FROM table2 t2
WHERE t1.f2=t2.f2 AND t1.f3=t2.f3);