簡體   English   中英

更新與其他列具有一個或多個相同值的列值

[英]Update column value that has one or more same values of other column

我有這樣的聲明:

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' 的所有行更新為 'Outstanding' ,這些行具有一個或多個相同的列fldAllocatedLeadId值到其他行。

我的數據

ID   fldAllocatedStatus   fldAllocatedLeadId
1    Accepted             123
2    Rejected             123
3    Allocated            123
4    Allocated            321

在這種情況下, ID = 3應將fldAllocatedStatus更新為“Outstanding”,因為它具有一個或多個來自ID = 1,2 的相同fldAllocatedLeadId

並且ID = 4應該保持“已分配”,因為它沒有fldAllocatedLeadId與其他行的匹配。

現在它所做的甚至更新了“接受,拒絕” ,它應該只更新帶有“已分配”的

您不需要任何聚合,只需一個自連接:

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                |

假設 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' ;

子查詢獲取具有某些未分配值的潛在客戶。 外部WHERE只更新分配的行(如果有)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM