我有一张像这样的桌子
+-------------------------------------+
| Description | ID | Show(1 or 0) |
+-------------------------------------+
我有一堆具有相同描述的条目,但其中一个ID为null。我必须在所有行上设置show而不将null设置为0,但前提是它们具有相同描述的第2行以上。我是SQL的新手,我有大约50K行,所以我宁愿不手动操作。
美国987655 1 - 改为0
USA 987658 1 - 改为0
美国987617 1 - 改为0
USA 989876 null - 未更改
CAN 767655 1 - 未更改
CAN 957655 1 - 未更改
尝试过:
UPDATE test1 t1,
(
SELECT id, description, show AS mid
FROM test1 ti
GROUP BY
description
) tm
SET show = 0
WHERE t1.description= tm.description
AND id is not null;
提前谢谢
答案 0 :(得分:1)
您需要一个相关的子查询。我没有测试过这个,所以请谨慎使用。但是这样的事情可能就是你所追求的。
UPDATE
some_table st1
JOIN (
SELECT st2.description, count(*) c
FROM some_table st2
WHERE
st1.description = st1.description AND
st1.id IS NOT NULL AND
st2.id IS NOT NULL
GROUP by st2.description
HAVING c > 1
) AS tmp ON tmp.description = st1.description
SET st1.show = 0
答案 1 :(得分:0)
这不是最终答案,但可以帮助你很多(我猜)
执行此查询以查看哪些应该从0更新为1
SELECT description, COUNT(*) as "Same Description" FROM table
WHERE id <> null
GROUP BY description
HAVING COUNT(*) > 2