SQL обновляет одну таблицу на основе условий в другой таблице

#sql #sql-update

#sql #sql-обновление

Вопрос:

Две таблицы.

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

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

Обе таблицы имеют одинаковые данные первичного ключа (topic_id).

Мне нужно обновить поле данных (таблица содержимого) текстом «отключено», но только там, где поле content_type (таблица тем) = текст «rvf»

Я могу: SELECT * from topics WHERE content_type = "rvf";

Я могу: UPDATE content SET data = ("disabled");

Но как я могу собрать их вместе.

Ответ №1:

Стандартное решение ANSI SQL (должно работать на любой СУБД)

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

Комментарии:

1. Спасибо, сработало отлично. Это было в SQLite, забыл упомянуть об этом.

Ответ №2:

Это должно сработать, если вы используете 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'
  

Не уверен, применимо ли это в данном случае, но приятно знать, что вы можете…

Комментарии:

1. Не отсутствует ли условие для content_type = 'rvf'