SQL Могу ли я использовать оператор CASE с условием добавления в условии СОЕДИНЕНИЯ

#sql #sql-server

#sql #sql-server

Вопрос:

Я хочу использовать оператор join с оператором case и условием добавления, например :

 SELECT
    TableA.* 
FROM
    TableA A
INNER JOIN 
    TableB B ON A.ID =  B.TableA_ID 
    CASE
        WHEN @zerocond = 1 
            THEN AND A.OrganizationId != '0'
        WHEN @zerocond = 2
            THEN AND COM.OrganizationId IN(1,2)
    END
 

Но этот код приводит к синтаксической ошибке. Кто-нибудь может помочь немного объяснить?

Комментарии:

1. CASE это выражение , а не оператор. Он возвращает скалярное значение. Однако не используйте CASE выражение в вашем ON или WHERE либо; это невозможно. Используйте правильную AND и OR логическую логику.

2. @larnu CASE — это оператор, который использует выражение….

3. CASE это выражение, @SQLPro . Боюсь, я не уверен, что говорит ваш комментарий.

4. @larnu МЕЖДУ, НАПРИМЕР, CASE, UNION, INTERSECT, EXCEPT, JOIN называются операторами в SQL. Ничего общего с «выражением»…

5. Нет, @SQLPro , это выражение. Смотрите Документацию : «Выражение CASE имеет два формата» , Оно также продолжает ссылаться на него как на выражение на всем протяжении.


Ответ №1:

Case When then Join В этом случае использование условия in и Where предложения in невозможно, то, чего вы пытаетесь достичь, выполнимо с And помощью и OR , как показано ниже.

 SELECT
    TableA.* 
FROM
    TableA A
INNER JOIN 
    TableB B ON A.ID =  B.TableA_ID 
    
Where ((@zerocond = 1 
            AND A.OrganizationId != '0')
        OR (@zerocond = 2
             AND COM.OrganizationId IN(1,2)))
 

Комментарии:

1. «Использование Case When then в условии соединения и в предложении Where невозможно». Это утверждение является ложным. Вы можете [использовать CASE выражение в WHERE or ON ], это просто опрометчиво.

2. что вы думаете сейчас?

3. Это решение решило мою проблему. Спасибо @magnus