ИСКЛЮЧИТЬ ВЫБОР SQL-запроса в DB2

Я новичок в DB2 и не могу найти ничего, связанного с EXCEPT запросы [кроме] довольно простых примеров. Я пытаюсь сравнить значения в двух таблицах, чтобы вернуть значения, которые появляются в TABLE_A но не в TABLE_B, Проблема в том, что сравниваемые столбцы не имеют точного ключа, но сначала требуют некоторых манипуляций.

ID_1 поле из TABLE_A выглядит так: 000 999

ID_2 поле из TABLE_B выглядит так: 111-000999

Таким образом, массируя данные из каждого идентификатора, мы получаем значение ключа 000999 для этого образца строки. Это должно привести к исключению этой строки из результата запроса, так как данные присутствуют в обеих таблицах.

SELECT REPLACE (ID_1, ' ','') AS ID_1_TRIM
FROM MYDB.TABLE_A
EXCEPT 
SELECT SUBSTRING(ID_2,5,10) 
FROM MYDB.TABLE_B

Этот синтаксис не работает, он возвращает все значения в TABLE_Aхотя значения массируемых ключей также отображаются в TABLE_B,

1 ответ

Решение

Вы пытаетесь обрезать может быть

 SELECT trim(REPLACE (ID_1, ' ','')) AS ID_1_TRIM
 FROM MYDB.TABLE_A
 EXCEPT 
 SELECT trim(SUBSTRING(ID_2,5,10)) FROM MYDB.TABLE_B

или бросить

 SELECT cast(trim(REPLACE (ID_1, ' ','')) as varchar(15)) AS ID_1_TRIM
 FROM MYDB.TABLE_A
 EXCEPT 
 SELECT cast(trim(SUBSTRING(ID_2,5,10)) as varchar(15))  FROM MYDB.TABLE_B

В моих запросах iseries ваш запрос, у вас есть пробелы в ID_1?

Другие вопросы по тегам