使用所选列中的值更新多行

Update multiple rows with the value from the selected column

我是 SQL 的新手,我有一个要求,我必须将特定列中的值递增 1,并根据 ID 更新同一列中的值。

这是我想要的,

    UPDATE books SET version_num = 
  (SELECT (version_num + 1) FROM books WHERE book_recid IN 
('72b72282-707b-4dd4-ab08-f5a085e92a2b', '73255df2-413e-4aad-892d-edc08ffa3405'))
WHERE book_recid IN 
('72b72282-707b-4dd4-ab08-f5a085e92a2b', '73255df2-413e-4aad-892d-edc08ffa3405');

我知道上面的查询行不通。我想要一个查询来像上面那样更新数据库中的值。

给列加1很简单。

您的查询过于复杂了。

UPDATE books SET version_num = version_num +1
WHERE book_recid IN ('72b72282-707b-4dd4-ab08-f5a085e92a2b', 
                     '73255df2-413e-4aad-892d-edc08ffa3405');

你可以在更新查询中做一个 from

UPDATE A SET col1 = something
FROM B
INNER JOIN C on B.col4 = C.col5
WHERE A.col2 = B.col3

在您的情况下,可能类似于以下内容

UPDATE books b SET version_num = tcp.version_num + 1
FROM tag_config_params tcp
WHERE tcp.book_recid = b.book_recid
AND tcp.book_recid IN ('72b72282-707b-4dd4-ab08-f5a085e92a2b', '73255df2-413e-4aad-892d-edc08ffa3405');

我假设 book_recid 是这里的外键关系。

这样做

UPDATE books
    SET version_num = tb1.vers
from (
    SELECT (version_num + 1) as vers FROM tag_config_params
     WHERE book_recid IN
  ('72b72282-707b-4dd4-ab08-f5a085e92a2b', '73255df2-  413e-4aad-892d-edc08ffa3405')
) tb1
WHERE book_recid IN 
('72b72282-707b-4dd4-ab08-f5a085e92a2b', '73255df2-413e-4aad-892d-edc08ffa3405');