gpt4 book ai didi

mysql - 根据通过交集表 C 连接的表 B 中的值更新 MySQL 表 A

转载 作者:行者123 更新时间:2023-11-30 23:32:18 25 4
gpt4 key购买 nike

我使用 MySQL 已经有一段时间了,但它还没有真正“进入”我的大脑,所以我希望我能在这里让自己理解,并且其他人可以帮助我清除这个特殊的大脑我的泥潭。 :-)

我有两个 MySQL 表,writersabstracts,以及一个以多对多关系连接它们的交集表 writer_abstract .

abstracts 表中,有一个字段 accepted (一个 bool 值)表示某个摘要是否已被接受发表。类似地,在 writers 表中,有一个字段 published(也是一个 bool 值),指示作者是否已经发表(或接受发表)任何内容。

交集表非常简单:它有一个自动递增的id 字段、一个writer_id 字段和一个abstract_id 字段。我可以使用交集表在 writersabstracts 之间来回选择,没有问题。

当接受或拒绝摘要时,abstracts.accepted 设置为 TRUEFALSE

我想做的是,在单个 MySQL 语句中,更新所有行中的 writers.published 并将其设置为 TRUE(如果有任何摘要) accepted 字段为 TRUE 的作者。但我不知道如何用UPDATE语句来让它工作。

我最大的努力是这样的:

UPDATE writers LEFT JOIN
( SELECT abstracts.id AS aid, abstracts.accepted AS aacc FROM writer_abstract
LEFT JOIN abstracts ON writer_abstract.abstract_id = writers.id
WHERE aacc = TRUE AND writers.id = writer_abstract.author )
AS res
SET published = TRUE

显然,这是行不通的(我的语法在 SET published = TRUE 附近有一个错误)。但这不可能是一件不容易完成的事情,对吧?!

非常感谢任何帮助! :-)

更新

根据 KingFisher 的回复,这里是实际完成我想要的版本(注意 RIGHT JOIN 而不是 LEFT JOIN——前者自然会影响所有行writers,这不是我想要的):

UPDATE writers RIGHT JOIN
( SELECT author, accepted FROM writer_abstract
LEFT JOIN abstracts ON writer_abstract.abstract_id = writers.id
WHERE accepted = TRUE )
AS res ON res.author = writers.id
SET published = TRUE

最佳答案

你应该有 on 子句连接 writers 表和你的 子查询

关于mysql - 根据通过交集表 C 连接的表 B 中的值更新 MySQL 表 A,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9935606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com