Использование подзапроса с предложением IN - PullRequest
2 голосов
/ 20 февраля 2020

Я застрял на одной конкретной проблеме здесь, я выбираю идентификаторы из одного столбца, которые похожи на это ',90132988,90133148,72964884,' Допустим, это значение хранится в столбце ColumnA таблицы 1.

Я хочу использовать это в другом запросе, использующем предложение IN, что-то вроде этого.

SELECT * 
FROM USER_GROUP 
WHERE ID IN (SELECT CONCAT(CONCAT('(',REPLACE(LTRIM(RTRIM(REPLACE(COLUMNA, ',', ' '))), ' ', ',')),')') FROM Table1)

Когда я запускаю этот запрос, я получаю ошибку неверного номера. Есть предложения?

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Вы получаете ошибку числа, потому что id это число. Таким образом, Oracle разумно предполагает, что подзапрос возвращает числа.

Я думаю, что вы хотите получить logi c:

SELECT ug.*
FROM USER_GROUP ug
WHERE EXISTS (SELECT 1
              FROM Table1 t1
              WHERE t1.COLUMNA LIKE '%,' || ug.ID || ',%'
             );

Я настоятельно не рекомендую хранить списки номеров в виде строк. Просто храните одну строку на номер. Это действительно намного проще, и полученный код будет более эффективным.

0 голосов
/ 21 февраля 2020

Вы можете попробовать преобразовать "ID", используя TO_CHAR, но вы потеряете использование любого индекса для ID, если он у вас есть.

SELECT * 
FROM USER_GROUP 
WHERE TO_CHAR(ID) IN (SELECT CONCAT(CONCAT('(',REPLACE(LTRIM(RTRIM(REPLACE(COLUMNA, ',', ' '))), ' ', ',')),')') FROM Table1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...