Оператор обновления не фильтрует условия, по умолчанию «else» использует MySQL - PullRequest
0 голосов
/ 08 апреля 2019

Мой оператор обновления должен находиться во второй строке в регистре.Тем не менее, по умолчанию это линия Else.Есть ли проблема с синтаксисом в этой строке?

Я выполнил оператор выбора, используя те же условия, и он возвращает эту запись.

SELECT issues.issue_type, issues.priority, issues.credentials, issues.status_id
FROM engagements 
LEFT OUTER JOIN issues ON issues.application_id = engagements.application_id 
WHERE 
    engagements.id = 5699 AND 
    issues.status_id <> 4 AND 
    issues.credentials = 1 AND 
    issues.issue_type IN ('EAPT', 'ENPT') AND 
    issues.priority = 'Medium';


Issue Type | priority | credentials | status.id
EAPT       |  Medium  |  1          |    1 

Оператор обновления, который я запускаю, приведен ниже.Из записи выше, я считаю, что это должно быть на второй строчке, но это не так.

UPDATE engagements
LEFT OUTER JOIN issues ON issues.application_id = 
engagements.application_id
SET engagements.engagement_score_ewc_id = 
     (CASE 
        WHEN (issues.credentials = 1 AND issues.issue_type IN ('EAPT', 'ENPT') AND issues.priority IN ('High', 'Critical') AND issues.status_id <> 4) THEN 3
        WHEN (issues.credentials = 1 AND issues.issue_type IN ('EAPT', 'ENPT') AND issues.priority IN ('Medium') AND issues.status_id <> 4) THEN 2
        WHEN (issues.credentials = 1 AND issues.issue_type IN ('EAPT', 'ENPT') AND issues.priority IN ('Low') AND issues.status_id <> 4) THEN 1
        ELSE 3
      END)
WHERE engagements.id = 5699;

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Вы должны выполнить этот запрос:

SELECT i.issue_type, i.priority, i.credentials, i.status_id
FROM engagements e LEFT OUTER JOIN
     issues i
     ON i.application_id = e.application_id 
WHERE e.id = 5699;

Я предполагаю, что у вас будет несколько строк.

Это означает, что ваш update обновляетодна и та же строка несколько раз - и какое из них получает окончательное значение - не определено.

Один из методов - повторить одинаковые условия where в запросе update.У вас могут быть и другие решения - скажем, выбрав одну конкретную запись из второй таблицы.

0 голосов
/ 08 апреля 2019
UPDATE engagements
LEFT OUTER JOIN issues ON issues.application_id = 
engagements.application_id
SET engagements.engagement_score_ewc_id = 
     (CASE 
        WHEN issues.priority IN ('High', 'Critical') THEN 3
        WHEN issues.priority IN ('Medium') THEN 2
        WHEN issues.priority IN ('Low') THEN 1
        ELSE 3
      END)
WHERE engagements.id = 5699
and issues.credentials = 1
and issues.issue_type IN ('EAPT', 'ENPT')
and issues.status_id<>4

Почему мы не можем использовать все общие условия в предложении where вместо выражения Case.

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