将行与同一表中的另一行进行比较

时间:2016-11-04 12:49:02

标签: mysql sql compare

我有一个具有以下结构的表:

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。

3 个答案:

答案 0 :(得分:0)

假设每个产品只有两种语言,这似乎就是你想要的:

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;

答案 1 :(得分:0)

使用这个For 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
)

答案 2 :(得分:0)

这个可以工作(看它在一个方形工作中实时工作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;