【问题标题】:SQL UPDATE Field under certain conditon特定条件下的 SQL UPDATE 字段
【发布时间】:2021-11-16 16:48:26
【问题描述】:

我有一张这样的桌子:

product_number    active    parent_id
119183            1         0x975c4deb281d4befbe679dacb4a0fda0
119182            1         0x975c4deb281d4befbe679dacb4a0fda0
119181            1         0x975c4deb281d4befbe679dacb4a0fda0
119180            1         0x975c4deb281d4befbe679dacb4a0fda0
ATR-38496         1         0x975c4deb281d4befbe679dacb4a0fda0
119179            1         0x975c4deb281d4befbe679dacb4a0fda0
ATR-38473         1         0x0002252627424031b2968e02b78dcf0c

我想将表格更新为这个结果:

product_number    active    parent_id
119183            1         0x975c4deb281d4befbe679dacb4a0fda0
119182            1         0x975c4deb281d4befbe679dacb4a0fda0
119181            1         0x975c4deb281d4befbe679dacb4a0fda0
119180            1         0x975c4deb281d4befbe679dacb4a0fda0
ATR-38496         0         0x975c4deb281d4befbe679dacb4a0fda0
119179            1         0x975c4deb281d4befbe679dacb4a0fda0
ATR-38473         1         0x0002252627424031b2968e02b78dcf0c

重要的是,此表有多个产品,每个产品可能有一些变体。
一个产品及其对应的变体在同一个 parent_id 下列出,而每个产品和变体集都有不同的 parent_id。
主产品需要active设置为0,可以通过product_number上的前缀“ATR-”来识别。
可悲的是,我无法提出适用于此问题的 sql 语句。

编辑:我有一些产品是独立产品,因此在同一个 parent_id 下没有多个产品,不应设置为 active=0

【问题讨论】:

  • @Akina 这并不是对所有产品都适用。抱歉,我忘记了一个重要部分,我只是将信息添加到“编辑:”下的问题中:
  • 编辑您的示例数据并添加与您的版本相匹配的行。

标签: mysql sql sql-update


【解决方案1】:

看来你需要在

UPDATE table t1
  JOIN table t2 USING (parent_id)
SET t1.active = 0 
WHERE LEFT(t1.product_number, 4) = 'ATR-'
  AND t2.product_number <> t1.product_number;

【讨论】:

    猜你喜欢
    • 2021-12-19
    • 2022-11-27
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    相关资源
    最近更新 更多