假设您有以下两个表:
X表
X_ID Y_ID_F X_Value
1 1 Q
2 1 G
3 1 T
4 2 W
5 2 K
...
Y表
Y_ID Y_Value
1 A
2 B
...
您只想查询Y父级值为A的属性并更新它们,以便您按如下方式编写查询(我意识到有更好的查询但请耐心等待):
UPDATE X set X_Value = 'O'
WHERE X_ID IN
(
select distinct X.X_ID FROM X
INNER JOIN Y ON X.Y_ID_F = Y.Y_ID
WHERE Y.Y_Value = 'A'
)
我以前认为这会做它看似说的:更新X表的行,其中连接的Y表的Y_Value ='A'。但是,似乎X.X_ID导致更新X表中的所有行,而不仅仅是您认为WHERE子句将其限制为的行。不知何故,X.X_ID导致查询完全忽略了where子句在限制更新行集时的尝试。关于为什么的任何想法?
编辑: 我认为它可能与我正在查询的数据库中的表的关联方式有关,而不是像我试图将其模糊的示例那样简单。
答案 0 :(得分:3)
我从未在UPDATE语句中获得子选择。相反,尝试以下内容:
UPDATE X SET X_Value = 'O'
FROM Y
WHERE Y.Y_ID = X.Y_ID_F
AND Y.Y_Value = 'A'
答案 1 :(得分:0)
这对我来说也没有任何意义,所以我试了一下。运行update语句后,表X的内容如下所示:
X_ID Y_ID X_VALUE
1 1 O
2 1 O
3 1 O
4 2 W
5 2 K
换句话说,我预期的结果。你确定这里没有其他工作吗?我确实注意到你的示例查询中有一个小的异常:在连接条件中引用'X.Y_ID_F',我希望看到'X.Y_ID'。我以为这只是一个错字。