2014-01-21 3 views
-1

Как изменить использование оператора IN в следующем заявлении:избегать (в операторе) с SQL

select stdId, stdName from students where stdId in (:stdsIds) 
+4

, что вы хотите изменить об этом – Tom

+0

я думаю, вы должны иметь это помечено как Oracle вместо SQL Server – cBlaine

+0

@cBlaine Если вы посмотрите на оригинал редактирования, OP писал «Я использую сервер SQL в настоящее время». Я удалил [tag: oracle]. Кажется, они хотели * конвертировать * запрос от Oracle к SQL Server. – Kermit

ответ

1

Обычно, вы можете избежать IN когда у вас есть более чем одна таблица

Если у вас есть что-то вроде

SELECT name 
FROM students s 
WHERE student_id IN (SELECT student_id 
         FROM courses 
         WHERE course_id = 1 
        ); 

В этом случае, вы можете использовать EXISTS

SELECT name 
FROM students s 
WHERE EXISTS (SELECT NULL 
       FROM courses c 
       WHERE c.student_id = s.student_id 
       AND c.course_id = 1 
      ); 
1

Используйте EXISTS заявление вместо этого. Таким образом, ваш запрос будет изменить это:

select stdId, stdName from students where exists(:stdsIds where stdId = students.stdId) 

EDIT: Я не использую Oracle, но я «думаю» синтаксис будет выглядеть следующим образом:

select stdId, stdName from students where exists(:stdsIds = students.stdId) 
Смежные вопросы