mysql - 带内连接的 SQL 更新

标签 mysql sql inner-join

我有一个记录表,它有一个 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/

相关文章:

sql - 如何获得命名内部联接的非重复计数?

MYSQL 内部通过两个键连接两个表

java - 在 IDE Netbeans 中从 java 连接到 MySQL 数据库

php - Ajax 无法与 wpdb 一起使用

mysql - 我想知道 Django 查询集中的排名

MySQL - 当日销售的特定产品的平均数量

sql - Postgresql 连接表而不丢失记录

sql - SELECT 中的临时序列

mysql - 将复杂的 SQL 转换为 JOIN

mysql不能插入是因为没有默认值?