ИСКЛЮЧИТЬ ВЫБОР 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?