MySQL:根据不可更新视图中的成员资格更新列

MySQL: Update a column based on membership in a non-updateable view

我在 table 中有一列,我想根据另一个 table 中的条件将其设置为真或假,该列仅通过第三个与第一个 table 相关table。第一个 table 是 table 个部署,第二个 table 包含每个部署的消息(每个部署很多消息),第三个 table 包含 msg_data仅来自某些消息。并非所有部署都包含 data_msg 消息,但如果包含,我想将部署 table 中的一列设置为 TRUE。我创建了 table 的视图,显示了该列应设置为 true 的所有行:

CREATE VIEW condition_true AS
SELECT DISTINCT deployment.id, deployment.condition
FROM deployment
JOIN messages ON messages.deployment_id = deployment.id
JOIN data_msgs ON data_msgs.messages_id = messages.id
GROUP BY deployment.id;

由于多种原因,此视图本身不可更新,但显然我想做的是

UPDATE condition_true
SET condition_true.condition = TRUE;

任何人都可以帮我弄清楚如何完成这个吗? 谢谢。

假设 iddeployment 的主键,您需要一个 UPDATE 语句连接 3 个表:

UPDATE deployment d
JOIN messages m ON m.deployment_id = d.id
JOIN data_msgs dm ON dm.messages_id = m.id
SET d.condition = true

或者,EXISTS

UPDATE deployment d
SET d.condition = true
WHERE EXISTS (
  SELECT 1 
  FROM messages m JOIN data_msgs dm 
  ON dm.messages_id = m.id
  WHERE m.deployment_id = d.id
)

或者,如果您想将列设置为 TRUEFALSE

UPDATE deployment d
SET d.condition = EXISTS (
  SELECT 1 
  FROM messages m JOIN data_msgs dm 
  ON dm.messages_id = m.id
  WHERE m.deployment_id = d.id
) 

此外,在您看来,不需要 GROUP BY deployment.id,因为您没有进行任何聚合并且您使用了 DISTINCT,所以您不会得到任何重复的行..