我有一张桌子,其结构如下:
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。
发布于 2016-11-04 13:31:23
这个方法可以工作(请参见它在sqlfiddle中运行实时这里 ):
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;发布于 2016-11-04 13:02:40
假设每个产品只有两种语言,这似乎可以满足您的需要:
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;发布于 2016-11-04 13:15:47
在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
)https://stackoverflow.com/questions/40423112
复制相似问题