Как выбрать в выборе, где внутренний выбор является подстрокой возвращаемого результата - PullRequest
0 голосов
/ 05 октября 2009

Это иллюстрирует пример, который, я думаю, должен работать, но не работает:

select * from TABLE_A where KEY in (
select substr(DYNAMIC_KEY,3) from TABLE_B where DYNAMIC_KEY like '$$%' and RECORD_ID='104251893783388824');

По сути, внутренняя инструкция выбора возвращает набор результатов с префиксом $$. Это используется в качестве ключа поиска в TABLE_A, который не содержит префикса '$$' в ключе.

Если я запускаю внутренний оператор вручную:

select substr(DYNAMIC_KEY,3) from TABLE_B where DYNAMIC_KEY like '$$%' and RECORD_ID='104251893783388824'

Скопируйте первый результат, скажем, '8462928318772288542' и выполните внешний оператор выбора

select * from TABLE_A where KEY = '8462928318772288542'

Это работает.

Однако, если я запустил оператор выбора в (select ...), я не получу результата.

Редактировать

Используемая здесь база данных - Oracle 10g.

Столбец DYNAMIC_KEY в TABLE_B представляет собой VARCHAR2

Столбец KEY в TABLE_A - это CHAR 32

Ответы [ 4 ]

1 голос
/ 06 октября 2009

Ваша проблема вызвана сравнением типов данных "char (32)" в TABLE_A.KEY и "varchar2" в TABLE_B.DYNAMIC_KEY. Значения в TABLE_A.KEY дополняются пробелами в dbms до определенного размера 32.

Когда вы выполнили подзапрос и скопировали результат во внешний запрос, вы сравнили столбец типа char (32) с литеральной строкой, которую dbms рассматривал как char (32). Это означает, что он был заполнен пробелами, и, таким образом, сравнение сработало.

В исходном запросе вы можете изменить "where KEY in (" на "where trim(KEY) in (", тогда запрос должен работать. Функция trim () возвращает значение varchar2.

1 голос
/ 05 октября 2009
SELECT TABLE_A.* 
FROM TABLE_A a
INNER JOIN TABLE_B b ON a.KEY = b.sbustr(DYNAMIC_KEY,3)
WHERE b.DYNAMIC_KEY like '$$%' AND b.RECORD_ID='104251893783388824'
0 голосов
/ 05 октября 2009

Возможно, у вас есть конечные пробелы, которые вам нужно обрезать в любом столбце? Или, возможно, приведите их обоих к одному и тому же типу данных?

0 голосов
/ 05 октября 2009

подстрока требует 3 элемента, а не два. Также я подозреваю, что есть несоответствие между значением ключа и значением подстроки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...