Mysql 更新具有其他列的一个或多个相同值的列值
我有以下声明:Mysql 更新具有其他列的一个或多个相同值的列值,mysql,sql,phpmyadmin,Mysql,Sql,Phpmyadmin,我有以下声明: UPDATE `tblAllocatedLeads` SET tblAllocatedLeads.fldAllocatedStatus = CASE WHEN tblAllocatedLeads.fldAllocatedStatus = 'Allocated' AND (SELECT COUNT(*) FROM (SELECT * FROM `tblAllocatedLeads`) AS tblallocate WHERE AND tblallocate.fldAlloc
UPDATE `tblAllocatedLeads`
SET tblAllocatedLeads.fldAllocatedStatus = CASE
WHEN tblAllocatedLeads.fldAllocatedStatus = 'Allocated'
AND
(SELECT COUNT(*) FROM (SELECT * FROM `tblAllocatedLeads`) AS tblallocate WHERE AND tblallocate.fldAllocatedLeadId = tblAllocatedLeads.fldAllocatedLeadId) > 1
THEN 'Outstanding'
END
我想要的是将fldAllocatedStatus='Allocated'的所有行更新为'unquired',该行具有一个或多个相同的fldAllocatedLeadId列值,并将其添加到其他行
我的数据
ID fldAllocatedStatus fldAllocatedLeadId
1 Accepted 123
2 Rejected 123
3 Allocated 123
4 Allocated 321
在这种情况下,ID=3应将fldAllocatedStatus更新为“未完成”,因为它从ID=1,2有一个或多个相同的fldAllocatedLeadId
ID=4应该保持“已分配”,因为它没有与其他行匹配的fldAllocatedLeadId
现在它所做的就是更新已接受的、已拒绝的数据,假定MySQL只更新已分配的行,我想您需要:
UPDATE tblAllocatedLeads al JOIN
(SELECT al2.fldAllocatedLeadId
FROM tblAllocatedLeads al2
WHERE al.fldAllocatedStatus <> 'Allocated'
GROUP BY al2.tblAllocatedLeads
) al2
ON al2.tblAllocatedLeads = al.tblAllocatedLeads
SET al.fldAllocatedStatus = 'Outstanding'
WHERE al.fldAllocatedStatus = 'Allocated' ;
子查询获取具有未分配值的Lead。外部连接仅在有已分配行时更新该行。您不需要任何聚合,只需要一个自连接:
UPDATE tblAllocatedLeads t
INNER JOIN tblAllocatedLeads tt
ON tt.id <> t.id AND tt.fldAllocatedLeadId = t.fldAllocatedLeadId
SET t.fldAllocatedStatus = 'Outstanding'
WHERE t.fldAllocatedStatus = 'Allocated';
用你正在使用的数据库标记你的问题。与你的问题无关,但是:这一个工作得很好。非常感谢你!。我感谢你的帮助。
| ID | fldAllocatedStatus | fldAllocatedLeadId |
| --- | ------------------ | ------------------ |
| 1 | Accepted | 123 |
| 2 | Rejected | 123 |
| 3 | Outstanding | 123 |
| 4 | Allocated | 321 |