【问题标题】:Compare row with another row in same table将行与同一表中的另一行进行比较
【发布时间】:2016-11-04 12:49:01
【问题描述】:

我有一个结构如下的表:

id_language  id_product  description
1            10           AAAA
2            10           BBBB
3            10           AABB
1            11           CCCC
2            11           CCCC
3            11           CCAA

我想要做的是找到所有在两种语言中具有相同描述的产品,并将语言 2 的描述替换为空值。因此,在上面的示例中,第 1 行和第 2 行将保持不变。但是,产品 11 和语言 2 的描述将设置为“”。像这样:

id_language  id_product  description
1            10           AAAA
2            10           BBBB
3            10           AABB
1            11           CCCC
2            11           
3            11           CCAA

是否可以仅使用 SQL 查询来做到这一点?我正在使用 MySQL。

【问题讨论】:

  • 这是可能的,但是如果您在查询中使用 distinct 关键字进行不同的描述。

标签: mysql sql compare


【解决方案1】:

这个有效(在 sqlfiddle 中看到它在 here 上实时工作):

UPDATE t
JOIN (

    SELECT
    t1.id_product,
    MIN(t1.id_language) AS min_lang,
    t1.description
    FROM t t1
    JOIN t t2 ON t1.id_product = t2.id_product
    AND t1.description = t2.description
    AND t1.id_language != t2.id_language
    GROUP BY t1.id_product

) sq ON t.id_product = sq.id_product
AND t.description = sq.description
SET t.description = ''
WHERE t.id_language > sq.min_lang;

【讨论】:

    【解决方案2】:

    假设您每个产品只有两种语言,这似乎可以满足您的需求:

    update t join
           (select id_product, max(id_language) as maxidl
            from t
            group by id_product
            having min(description) = max(description)
           ) tt
           on t.id_product = tt.id_product and t.id_language = tt.maxidl
        set description = null;
    

    【讨论】:

    • 每个产品有两种以上的语言。我将更新我的帖子以反映这一点。
    • @user3658609 。 . .不要更新帖子。问另一个问题。
    【解决方案3】:

    将这个用于MySql

    UPDATE Table SET description=''
    WHERE (id_product,id_language) in(
    SELECT id_product,MAX(id_language) FROM Table
    GROUP BY description,id_product 
    HAVING COUNT(id_language)>1
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-05
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 2020-09-30
      • 1970-01-01
      相关资源
      最近更新 更多