我有一个名为customers的MYSQL表。其中一些在orderNumber上有重复的条目 我想在customers.working中输入所有这些记录中的DUPL值,而不仅仅是额外的副本。请注意,fieldA和fieldB中的值可能不重复,因此我需要标记所有值。
表客户(订单号'123重复)
orderNumber fieldA fieldB working
123 vdss fhghg
456 bhtf fhbb
789 goyh vhhgg
123 fhgh fhfhf
期望,在更新()
之后orderNumber fieldA fieldB working
123 vdss fhghg DUPL
456 bhtf fhbb
789 goyh vhhgg
123 fhgh fhfhf DUPL
选择完美无缺:
SELECT `orderNumber`
FROM `customers`
GROUP BY `orderNumber`
HAVING COUNT(`orderNumber`) > 1
但更新没有。我有一个错误,MYSQL无法使用select来更新:
UPDATE `customers` set `customers.working` ='DUPL' where `customers.orderNumber` =
(SELECT `orderNumber`
FROM `customers`
GROUP BY `orderNumber`
HAVING COUNT(`orderNumber`) > 1);
我也尝试了这个,但是语法错误:
UPDATE `customers` SET `customers.working` ='DUPL'
WHERE customers.orderNumber = INNER JOIN
(SELECT `orderNumber`
FROM `customers`
GROUP BY `orderNumber`
HAVING COUNT(`orderNumber`) > 1);
格式化这种格式的正确方法是什么?
答案 0 :(得分:1)
您使用UPDATE `customers` c
INNER JOIN (SELECT `ordernumber`
FROM `customers`
GROUP BY `ordernumber`
HAVING Count(`ordernumber`) > 1) jn
ON jn.ordernumber = c.ordernumber
SET c.working = 'DUPL'
语句无效。试试这个:
height
答案 1 :(得分:1)
这是来自内存而未经过测试。由于你没有说出错误是什么,我猜测之前使用Mysql做类似的事情。如果错误说您无法更新并从同一个表中进行选择,则需要为select添加别名。如果没有,我认为你应该使用IN而不是连接。
未经测试但应该正常工作
UPDATE `customers`
SET `customers.working` = 'DUPL'
WHERE customers.ordernumber IN (SELECT t1.`ordernumber`
FROM (SELECT ordernumber
FROM `customers`
GROUP BY `ordernumber`
HAVING Count(`ordernumber`) > 1) AS t1);
在移动设备上,希望格式正确,括号按正确的顺序等等):