2017-01-25 6 views
0

У меня есть следующий SQL запросOracle подзапрос после как ошибки

SELECT * FROM users u WHERE 1=1 and u.user_name LIKE 'A%' 

Он работает, как ожидалось. Но в следующей строке появляется сообщение об ошибке.

SELECT * FROM users u WHERE 1=1 and u.user_name LIKE (select '%arthur%' from dual) 

Сообщение об ошибке выглядит следующим образом:

ORA-00933 SQL Command not properly ended 

Я попытался закрыть запрос с ";" но он по-прежнему дает ту же ошибку. Что может вызвать эту ошибку?

Редактировать: мне нужно LIKE и не может использовать IN, давайте предположим, что у нас есть только один «arthur» в базе данных пользователей.

+0

Возможный дубликат [Использование оператора LIKE с подзапросом, который возвращает несколько результатов] (http://stackoverflow.com/questions/18049602/using-like-operator-with-a-subquery-that-returns-multiple -results) – JohnHC

+1

'SELECT * FROM DUAL WHERE 'abcd' LIKE (SELECT '% bc%' FRM DUAL);' работает без ошибок. Как вы ссылаетесь на это утверждение? – MT0

+1

Синтаксис кажется правильным, где вы пытаетесь выполнить это утверждение? – TheName

ответ

2

Ваш запрос выглядит правильно синтаксически. Подзапрос представляет собой скалярный подзапрос , который возвращает только один столбец и не более одной строки.

В общем, вы можете использовать LIKE с подзапроса с использованием EXISTS:

SELECT u.* 
FROM users u 
WHERE 1 = 1 AND 
     EXISTS (SELECT 1 
       FROM t 
       WHERE u.user_name LIKE t.col 
      ); 

Если ваш фактический запрос является более сложным, то это может решить актуальную проблему.

0

Я пробовал тот же запрос, что и ваш, он отлично работал.

SELECT * FROM employee e где 1 = 1 и e.name like (выберите '% abc%' из двойника);