1

我有 2 张桌子,table1带有 colsv1v2table2带有 colsv3v4

我想更新table2.v2是否table1.v1有匹配的值table2.v3

我有以下似乎有效的代码

UPDATE table1
SET v2 = 99
WHERE exists(select v3 from table2
where table2.v3=table1.v1);

我还尝试了一个失败的相交版本(更新 v2 的两行)

UPDATE table1
SET v2 = 99
WHERE exists(select v1 from table1
intersect select v3 from table2);
4

5 回答 5

4

为此,我们有两个答案

1)内连接

UPDATE table1
SET v2 = 99
FROM table2 
     INNER JOIN table1
     ON table2.v3= table1.v1

2) with in 子句

 UPDATE table1
 SET v2 = 99
 Where v1 in (Select v3 FROM table2)
于 2013-04-03T04:57:39.000 回答
2

根据我的观点,首先通过“如果存在”检查表的值,如下所示,然后应用于更新。

IF EXISTS
(
 select V1 from T2
 where v1 in (select v1 from t2)
)

BEGIN
UPDATE T1
SET v2 = 99
end

干杯.....

于 2013-04-03T05:05:05.463 回答
1

请检查以下是否是您的要求:

UPDATE table1
SET v2 = 99
WHERE v1 IN (select v3 from table2)
于 2013-04-03T04:22:12.353 回答
1

我认为您不能在此查询中使用 intersect ,因为您没有在子查询和外部查询之间使用任何连接条件。我确实认为 Exists 期望这种情况。

试试用这个,

UPDATE table1
SET v2 = 99
WHERE v1 in (select v1 from table1
intersect select v3 from table2);
于 2013-04-03T04:29:17.923 回答
0

使用连接更新表。

UPDATE table2
SET v2 = 99
From table2 Inner Join table1 on  table1.v1=table2.v3
于 2013-04-03T04:23:29.353 回答