假设我有一个 mysql 表:
ID, Name, Number
1, abc, 0
2, def, 0
3, def, 0
4, ghi, 0
我现在想在字段“名称”的值仅出现一次的所有记录中更改字段“数字”的值(比如 1)(在本例中为记录 1 和记录 4)。我如何在mysql中以最简单的方式做到这一点?
我是一个 mysql 初学者,并且在谷歌上搜索了很多这个问题,但没有找到解决方案 - 至少不是一个简单到让我理解的解决方案。
假设我有一个 mysql 表:
ID, Name, Number
1, abc, 0
2, def, 0
3, def, 0
4, ghi, 0
我现在想在字段“名称”的值仅出现一次的所有记录中更改字段“数字”的值(比如 1)(在本例中为记录 1 和记录 4)。我如何在mysql中以最简单的方式做到这一点?
我是一个 mysql 初学者,并且在谷歌上搜索了很多这个问题,但没有找到解决方案 - 至少不是一个简单到让我理解的解决方案。
它很简单,请尝试使用 mysql
update [tablename] set number=1
where id in (select id
from [tablename]
group by name
having count()=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...)
。小提琴在这里。
最简单的方法是使用子查询:
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
(SELECT Name, COUNT(Name) GROUP BY Name)
为您提供具有唯一名称的表格并计算名称的出现次数。
UPDATE (SELECT ID, COUNT(name) GROUP BY Name)
SET Number = 1
WHERE COUNT(name) = 1
虽然没有测试,但希望它指导你回答
你可以使用这个: -
UPDATE Yourtable SET number=1 where ID in (Select id,count(name) as num from Yourtable group by name having num=1)