![](/img/trans.png)
[英]Matching one value in one column with more than one values in other column in SQL
[英]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.