Я пытаюсь выполнить запрос в DB2. Но он бросает следующие ошибки:Подзапрос DB2 не работает с использованием инструкции IN SQLCODE 115
Error: DB2 SQL Error: SQLCODE=-115, SQLSTATE=42601, SQLERRMC=IN, DRIVER=4.8.86
SQLState: 42601
ErrorCode: -115
Error: DB2 SQL Error: SQLCODE=-514, SQLSTATE=26501, SQLERRMC=SQL_CURSH200C1; STMT0001, DRIVER=4.8.86
SQLState: 26501
ErrorCode: -514
Какой does'nt иметь смысл, как мой запрос выглядит правильно:
SELECT ROW_NUMBER() OVER() AS ID,
CONCAT(TRIM(TB1.ROW1),CONCAT('_',TRIM(TB1.ROW2))) AS CODE_DESCRIPTION,
CASE
WHEN TRIM(TB1.ROW1) IN (SELECT T1.ROW1 FROM DB1.TABLE1 T1 WHERE T1.ROW3 = 'TEST')
THEN 'Valid'
ELSE 'Invalid'
END,
TB1.* FROM DB1.TABLE1 TB1
WHERE TB1.ROW3 = 'CLASS1';
SQLCODE 115 означает, что сравнение является недействительным. Который не ?
Обновление: Что я пытаюсь сделать здесь. У меня есть таблица Table1 (имя изменено для простоты). Ниже приведена часть контента.
**Row3** **Row1** **Row2**
KSASPREM SRQ 0 0 Auto Carry SRQ
KSASPREM SCG 0 0 BRT Buses SCG
KSASPREM SCE 0 0 Buses SCE
KSASPREM SRR 0 0 Buses SRR
KSASPREM SDC 0 0 Domestic All Risks SDC
KSASPREM SDA 0 0 Domestic Buildings SDA
Задача для выполнения:
- Получить все значения из Table1, где Row3 является KSASPREM
- Результат должен содержать один дополнительный «Действительный» значение столбца Да/Нет, если значение Row1 не в значениях, полученных из таблицы 1, где Row3 является «TEST»
Надеюсь, я сделал себя ясным и не более запутанным?
Любая помощь? Thanks Ps. Обновлен запрос
Насколько я знаю, вы должны иметь 'THEN' как часть выражения' CASE'. Что вы пытаетесь сделать там? Даже если это допустимый синтаксис, похоже, что это не повлияет. Кроме того, 'Table1', кажется, имеет несколько столбцов (хотя очень странно названо' row1' и т. Д.), Поэтому 'SELECT *' приведет к синтаксическим ошибкам из-за несоответствия счетчика. Возможно, если бы вы показали свой стол и желаемые результаты? Обратите внимание, что результаты 'ROW_NUMBER()' будут последовательными, но не детерминированными (каждый раз каждый раз). –
Спасибо за ответ. Я обновил запрос. Я добавил THEN и ELSE, все еще ту же ошибку. – punkck
Жалоба на то, что 'IN + subquery' недопустим как часть инструкции' CASE', по-видимому (помимо дополнительной синтаксической ошибки отсутствующей запятой после 'END ...'). Вероятно, вы не хотите делать это как подзапрос в 'SELECT' в любом случае - он, вероятно, будет запускаться один раз для каждой строки результатов, что может быть дорогостоящим. Вам будет лучше обслуживать, выполняя 'LEFT JOIN' +' COALESCE (..., 'Invalid') '- будет ли когда-нибудь только одна строка' 'TEST''? И вам, скорее всего, не нужно будет вызывать 'TRIM (row1)', если нет похожих строк с дополнительными пробелами (которые должны быть исправлены ...) –