-1

我有一张这样的桌子

+-------------------------------------+
| Description | ID  |  Show(1 or 0)   |
+-------------------------------------+

我有一堆具有相同描述的条目,但其中一个的 ID 为空。我必须将所有没有 null 的行的 show 设置为 0,但前提是它们具有相同描述的多于 2 行。我是 SQL 新手,我有大约 50K 行,所以我宁愿不手动执行。

美国 987655 1 - 更改为 0

美国 987658 1 - 更改为 0

美国 987617 1 - 更改为 0

美国 989876 空 - 不变

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;

先感谢您

4

2 回答 2

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
于 2013-03-12T00:58:36.810 回答
0

这不是最终答案,但可以帮助你很多(我猜)

执行此查询以查看哪些应从 0 更新为 1

SELECT description, COUNT(*) as "Same Description" FROM table
WHERE id <> null
GROUP BY description
HAVING COUNT(*) > 2
于 2013-03-12T01:03:40.093 回答