我有一个具有以下结构的表:
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。
答案 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;