SQL существует в TableA или TableB - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь создать сценарий, которому требуется условие для проверки значения столбца в Таблице 3, существующей в Таблице 1 или Таблице 2

SELECT *      
FROM [ZERO_BALANCE].[DBO].[dat_acct_codes_REJECTIONS] ACR
WHERE [REJECTIONREASON] = 'MISSING LINKING ACCOUNT'
AND 
EXISTS 
(SELECT 1 FROM ref_PX WHERE CAST(PX AS VARCHAR(MAX)) = CAST(ACR.[Code] AS VARCHAR(MAX))
OR
(SELECT 1 FROM ref_DX WHERE CAST(DX AS VARCHAR(MAX)) = CAST(ACR.[Code] AS VARCHAR(MAX)))

Сообщение 4145, Уровень 15, Состояние 1, Строка 44 Выражение не булева типа, указанное в контексте, где ожидается условие, рядом с ')'.

1 Ответ

2 голосов
/ 26 сентября 2019

Проблемы с вашим запросом:

  • Отсутствуют скобки в функции CAST() (как прокомментировал Дейл Баррелл )

  • Вам нужно повторять ключевое слово EXISTS для каждого условия

  • Остерегайтесь старшинства операторов: OR имеет меньший приоритет, чем AND, поэтому, насколько я понимаюПо вашему запросу вы должны быть заключены в круглые скобки.

Правильное форматирование помогает обнаружить такие вещи.

SELECT *      
FROM [ZERO_BALANCE].[DBO].[dat_acct_codes_REJECTIONS] ACR
WHERE 
    [REJECTIONREASON] = 'MISSING LINKING ACCOUNT'
    AND (
        EXISTS (
            SELECT 1 
            FROM ref_PX 
            WHERE CAST(PX AS VARCHAR(MAX)) = CAST(ACR.[Code] AS VARCHAR(MAX))
        )
        OR EXISTS (
            SELECT 1 
            FROM ref_DX 
            WHERE CAST(DX AS VARCHAR(MAX)) = CAST(ACR.[Code] AS VARCHAR(MAX))
        )
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...