Mysql 使用SQL查询更新除一行以外的所有行

Mysql 使用SQL查询更新除一行以外的所有行,mysql,sql,oracle-sqldeveloper,Mysql,Sql,Oracle Sqldeveloper,我有一张这样的桌子 +-------------------------------------+ | Description | ID | Show(1 or 0) | +-------------------------------------+ 我有一堆描述相同的条目,但其中一个ID为null。我必须将所有不带null的行上的show设置为0,但前提是它们具有多个相同描述的行2。我是SQL新手,我有大约5万行,所以我不想手动操作 美国987655 1-更改为0 美国987658

我有一张这样的桌子

+-------------------------------------+
| Description | ID  |  Show(1 or 0)   |
+-------------------------------------+
我有一堆描述相同的条目,但其中一个ID为null。我必须将所有不带null的行上的show设置为0,但前提是它们具有多个相同描述的行2。我是SQL新手,我有大约5万行,所以我不想手动操作

美国987655 1-更改为0

美国987658 1-更改为0

美国987617 1-更改为0

美国9876空-未更改

CAN 7655 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;

提前谢谢

您需要一个相关的子查询。我还没有测试过这个,所以请小心使用。但像这样的事情可能就是你想要的

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

这不是最后的答案,但可以帮你很多(我想)

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

SELECT description, COUNT(*) as "Same Description" FROM table
WHERE id <> null
GROUP BY description
HAVING COUNT(*) > 2
从表中选择描述,将(*)计数为“相同的描述”
其中id为null
按描述分组
计数(*)大于2的

请参见。从左表中选择ID,然后连接同一个表,其中某些内容与其他内容匹配,而某些内容为空。。。回答了这么多次。例如,在上面记录的最后一部分中,这一行是否
EUR 66666 1 0
,是否需要将其更改为1?或者没有,因为它只有一个
EUR
?没有,只有当它有两个以上的entriesok时才有,但是为什么
USA
将更改为
0
,并且
可以
保留其值,用于
显示