Oracle SQL Передача одинарных кавычек в предложении IN - PullRequest
0 голосов
/ 20 мая 2019

Я пишу запрос для фильтрации нескольких записей на основе идентификатора, как показано ниже.Проблема в том, что emp_id определен как Число в одной Таблице, а в другой есть Varchar.Мне нужно передать одинарные кавычки в IN CLAUSE

SELECT   emp_id, sal, name
from EMP1 -- here emp_id is defined as varchar 
where
 emp_id IN( Q'[Select empid from emp2]')-- as you can see i tried q'[]' to escape single quotes and doesn't work

Ответы [ 2 ]

3 голосов
/ 20 мая 2019

То, что вы пытаетесь сделать, не имеет смысла, а просто помещает строковый литерал SQL-запроса в предложение IN, а не все значения empid, полученные из таблицы emp2. Вместо этого просто используйте обычный подзапрос и вызовите TO_NUMBER для emp_id в таблице EMP1, чтобы он правильно сравнивался с empid в таблице emp2.

SELECT emp_id, sal, name
FROM EMP1
WHERE TO_NUMBER(emp_id) IN (SELECT empid FROM emp2);

Если приведенный выше запрос все еще доставляет вам проблемы, то это может означать, что некоторые данные в emp_id не являются правильным числом или, по крайней мере, не тем, что TO_NUMBER может анализировать. В этом случае вы можете вместо этого попытаться привести значение empid в подзапросе к символу:

SELECT emp_id, sal, name
FROM EMP1
WHERE emp_id IN (SELECT TO_CHAR(empid) FROM emp2);
1 голос
/ 20 мая 2019

используя INNER JOIN, вы можете избежать предложения IN

  SELECT   emp_id, sal, name
  from EMP1 
  INNER JOIN EMP2 ON TO_CHAR(EMP2.empid) = EMP1.emp_id 

и вы можете преобразовать данные в состояние ON

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