Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 更新具有其他列的一个或多个相同值的列值_Mysql_Sql_Phpmyadmin - Fatal编程技术网

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                |