2016-12-08 4 views
0
SELECT FIELD1, FIELD2... 
FROM VIEW1 
WHERE ID IN (SELECT DISTINCT ID FROM TABLE1 WHERE NAME_FIELD LIKE '%ABC%') 
ORDER BY FIELD1, FIELD2; 

При выборе из вида одним из условий является WHERE ID IN (подзапрос). Ошибка оракула, как в заголовке.Oracle: WHERE ID IN() однострочный подзапрос возвращает более одной строки

Но если я сначала запустил подзапрос, а затем заменил подзапрос возвращаемыми идентификаторами, он работает.

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

Что я сделал не так? Спасибо.

+1

Что делать, если вы пытаетесь 'выбрать * из VIEW1'? – Aleksej

+0

Спасибо @Aleksej, я заметил проблему. Это подзапрос в представлении. Проблема качества данных. – Cal

+0

Когда вы проверяете условие IN, выберите DISTINCT не помогает - скорее, это больно. выберите DISTINCT намного дороже, чем простой SELECT. Попробуйте в обоих направлениях и посмотрите, какая из них работает лучше. – mathguy

ответ

0

Используйте операцию вырезания вместо:

SELECT FIELD1, FIELD2... 
    FROM VIEW1 
WHERE EXISTS (SELECT 1 
       FROM TABLE1 
       WHERE NAME_FIELD LIKE '%ABC%' 
        AND VIEW1.ID = TABLE1.ID) 
ORDER BY FIELD1, FIELD2; 
Смежные вопросы