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;
任何人都可以帮我弄清楚如何完成这个吗?
谢谢。
假设 id
是 deployment
的主键,您需要一个 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
)
或者,如果您想将列设置为 TRUE
或 FALSE
:
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
,所以您不会得到任何重复的行..
我在 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;
任何人都可以帮我弄清楚如何完成这个吗? 谢谢。
假设 id
是 deployment
的主键,您需要一个 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
)
或者,如果您想将列设置为 TRUE
或 FALSE
:
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
,所以您不会得到任何重复的行..