Вы должны понимать, что CASE ... END
блок НЕ эквивалентен IF { }
из C-подобных языков. Скорее всего, это эквивалентно сложной версии оператора ... ? ... : ...
из C-подобных языков. Что это означает, что блок WHOLE CASE
должен, по существу, оценивать одно значение и что это значение должно быть одного и того же типа независимо от того, в каком случае выполняется блок. Это означает, что:
CASE
WHEN ts.ACCOUNTTYPE = '1' THEN ts.ACCOUNTID=SI.TENANCYID ...
END
принципиально неправильно, если вы работаете на версию базы данных, которая позволит вам BOOL значения в качестве значения (SQL Server не позволят, например, но я думаю, что некоторые версии MySQL используется для разрешите это - не уверен в этом). Вы, наверное, должны написать что-то вроде:
CASE
WHEN ts.ACCOUNTTYPE = '1' AND ts.ACCOUNTID=SI.TENANCYID THEN 1
WHEN ts.ACCOUNTTYPE='2' AND ts.ACCOUNTID=SI.EMPLOYEEID THEN 1
WHEN ts.ACCOUNTTYPE='3' AND ts.ACCOUNTID=SI.SUPPLIERID THEN 1
WHEN ts.ACCOUNTTYPE='4' AND ts.ACCOUNTID=SI.SALESCUSTOMERID THEN 1
ELSE 0
END = 1
Обратите внимание, как весь CASE
блок оценивает в 1 или 0, а затем сравнивается с 1. Конечно, вместо 4 WHEN
«s вы можете использовать один WHEN
с комбинацией AND
, OR
и ()
скобки. Конечно, в этом конкретном случае ответ @ppeterka 66 верен, так как CASE
не подходит для того, что вы действительно хотели сделать - я просто пытаюсь выяснить, что такое CASE
.
Вы выполнили запрос, но вы точно не объяснили, в чем причина ошибки. – nimdil