Обновить значение столбца, которое имеет одно или несколько одинаковых значений другого столбца - PullRequest
1 голос
/ 19 февраля 2020

У меня есть это утверждение:

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 до «Выдающийся», поскольку он имеет один или несколько одинаковых fldAllocatedLeadId из ID = 1,2

и ID = 4 должен оставаться «Выделенным» поскольку он не имеет совпадения fldAllocatedLeadId с другими строками.

прямо сейчас, что он делает, он обновляет даже "Принято, отклонено" , которое предположительно должно обновляться только строки с «Выделено»

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Вам не нужна агрегация, просто самостоятельное объединение:

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                |
0 голосов
/ 19 февраля 2020

Предполагая 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 обновляет только выделенную строку (если она есть).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...