我有一个记录表,它有一个 self 关系。
另外 - 为了使搜索更容易 - 我有一个标志,它确定一条记录已被引用,因此该行现在“已过时”并且仅用于审计目的:
CREATE TABLE Records
(
RecordID INT(5) NOT NULL,
Replaces INT(5) NULL,
Obsolete INT(1) NOT NULL
)
RecordID
是 PK,Replaces
链接到现在已被替换的以前的 RecordID,Obsolete
是冗余信息,它只是说另一张唱片取代了这张唱片。它只会让搜索变得更容易。 table 很大。这些只是其中的 3 列。
唯一的问题是:系统中的一个查询存在拼写错误,因此对于一小组行,Obsolete 值未设置为 1(真)。
此查询将显示所有 Obsolete 等于 0 的记录,应该等于 1:
SELECT *
FROM Records AS rec1
LEFT JOIN Records AS rec2
ON rec1.Replaces = rec2.RecordID
WHERE rec2.RecordID IS NOT NULL
AND rec2.Obsolete = 0;
现在我需要运行 UPDATE 将所有 req2.Obsolete 从 0 更改为 1,但我不确定如何使用 INNER JOIN 编写查询。
最佳答案
您不需要内部联接。由于您的查询已经返回需要更新的记录,只需执行以下操作:
Update Records
set Obsolete=1 where
RecordID in (
SELECT rec2.RecordID
FROM Records AS rec1
LEFT JOIN Records AS rec2
ON rec1.Replaces = rec2.RecordID
WHERE rec2.RecordID IS NOT NULL
AND rec2.Obsolete = 0
)
关于mysql - 带内连接的 SQL 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7884410/