根据另一张表中的条件更新一个表的SQL语句

20

两个表格。

Content (table),
   topic_id (primary key),
   data (text)

Topics (table),
   topic_id (primary key),
   content_type (text)

这两个表拥有相同的主键数据(topic_id)。

我需要将数据字段(Content表)更新为文本“disabled”,但仅当content_type字段(Topics表)=文本“rvf”时才更新。

我可以:SELECT * from topics WHERE content_type = "rvf";

我可以:UPDATE content SET data = ("disabled");

但是我该如何将它们放在一起呢?

3个回答

43

标准 ANSI SQL 解决方案(适用于任何 DBMS)

UPDATE content 
   SET data = 'disabled'
 WHERE topic_id IN (SELECT t.topic_id 
                    FROM topics t
                    WHERE t.content_type = 'rvf')

谢谢,运行得非常完美。这是在SQLite中的,我忘了提到这一点。 - Josh Bond

13

如果您正在使用SQL Server,那么这应该会起作用。

UPDATE content 
SET data = 'disabled'
FROM content
INNER JOIN topics
on content.topic_id = topics.topic_id
WHERE content_type = 'rvf'

你也可以通过以下方式使用主题值更新内容:

UPDATE content 
SET content.data = topics.content_type
FROM content
INNER JOIN topics
on content.topic_id = topics.topic_id
WHERE content_type = 'rvf'

不确定它是否适用于这种情况,但知道你可以这样做是很好的...


这不是缺少了 content_type = 'rvf' 的条件吗? - user330315

0
更新客户 SET accountNo =(SELECT code FROM Accounts_Index WHERE aname = name) WHERE name IN (SELECT aname FROM Accounts_Index WHERE aname = name)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接