1

假设我有一个 mysql 表:

ID, Name, Number
1, abc, 0
2, def, 0
3, def, 0
4, ghi, 0

我现在想在字段“名称”的值仅出现一次的所有记录中更改字段“数字”的值(比如 1)(在本例中为记录 1 和记录 4)。我如何在mysql中以最简单的方式做到这一点?

我是一个 mysql 初学者,并且在谷歌上搜索了很多这个问题,但没有找到解决方案 - 至少不是一个简单到让我理解的解决方案。

4

5 回答 5

2

它很简单,请尝试使用 mysql

update  [tablename] set number=1 
where id in (select id 
  from [tablename] 
  group by name 
  having count()=1) ) 

我的语法可能有点错误,您可以尝试使用它们。嵌套查询将解决此问题,您将能够无缝获得结果

祝您好运,如果您需要任何帮助,请告诉我,我会写出准确的查询并给您。

于 2013-05-04T06:03:39.940 回答
1

由于您使用的是 MySQL,因此您需要在更新查询上使用 JOIN:

UPDATE
  yourtable t1 INNER JOIN (SELECT Name
                           FROM yourtable
                           GROUP BY Name
                           HAVING COUNT(*)=1) t2
  ON t1.Name=t2.Name
SET
  Number=1

在此处查看小提琴。或者您需要使用嵌套子查询:

UPDATE yourtable
SET Number=1 
WHERE id IN (SELECT * FROM (SELECT id FROM yourtable 
             GROUP BY name 
             HAVING COUNT(*)=1) s)

(请注意SELECT * FROM (...your subquery...)。小提琴在这里

于 2013-05-04T06:54:40.100 回答
0

最简单的方法是使用子查询:

UPDATE mytable AS NumberUpdating SET Number = 42 WHERE NOT EXISTS (
    SELECT 1 FROM Number AS NumberTesting
    WHERE
        NumberTesting.ID != NumberUpdating.ID AND
        NumberTesting.Name == NumberUpdating.Name
)

它在做什么更明显,但它的性能可能不如JOIN

UPDATE FROM mytables AS NumberUpdating
LEFT JOIN mytable AS NumberTesting ON
    NumberTesting.Name == NumberUpdating.name AND
    NumberTesting.ID != NumberUpdating.ID
WHEN NumberTesting.ID IS NULL
SET Number = 42
于 2013-05-04T06:03:57.743 回答
0

(SELECT Name, COUNT(Name) GROUP BY Name)为您提供具有唯一名称的表格并计算名称的出现次数。

UPDATE (SELECT ID, COUNT(name) GROUP BY Name)
SET Number = 1
WHERE COUNT(name) = 1

虽然没有测试,但希望它指导你回答

于 2013-05-04T06:08:02.177 回答
0

你可以使用这个: -

UPDATE Yourtable SET number=1 where ID in (Select id,count(name) as num from Yourtable group by name having num=1)
于 2013-05-04T06:08:13.740 回答