使用SQL查询更新除一个之外的所有行

时间:2013-03-12 00:38:16

标签: mysql sql oracle-sqldeveloper

我有一张像这样的桌子

+-------------------------------------+
| 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;

提前谢谢

2 个答案:

答案 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