Ниже мой SQL-запрос, и я получаю ошибку при выполнении его как ORA-01427: однострочный подзапрос возвращает более одной строки.ORA-01427: однострочный подзапрос возвращает более одной строки SQL-запрос
Пожалуйста, помогите с работой вокруг:
SELECT *
FROM TableName err
WHERE ERR.SYSCD IN
(decode(REGEXP_COUNT('TEST1,TEST2', ','), 0, 'TEST3',
(SELECT DISTINCT syscd
FROM TableName
WHERE syscd IN
(SELECT err.syscd
FROM TableName ERR
WHERE ERR.SYSCD NOT IN
(SELECT UPPER(
REGEXP_SUBSTR(
'TEST1',
'[^,]+',
1,
LEVEL))
CNTRY_CD
FROM DUAL
CONNECT BY REGEXP_SUBSTR(
'TEST1',
'[^,]+',
1,
LEVEL)
IS NOT NULL)
)
OR syscd IS NULL)))
Ошибка само за себя: один из подзапросов возвращается более одной строки. Вы лучше всего можете проверить свою бизнес-логику и изменить запрос. –
@TimBiegeleisen правильный (сам пояснительная записка). Я бы добавил в качестве бонуса следующее: Вы уверены, что хотите иметь REGEXP в столбцах исходной таблицы? Если таблица (таблицы) мала, то она должна быть в порядке. В противном случае вы вызываете полное сканирование в таблице (таблицах). – FDavidov
Если бы я был игроком ставок, я бы сказал, что подзапрос SELECT DISTINCT syscd' является виновником, так как это единственный, который я вижу, в котором вам нужен результат одной строки. Чтобы помочь вам исправить это, вам нужно будет объяснить, что вы хотите. – Deltharis