2014-01-21 101 views
-1

如何更改在下面的语句使用IN运营商:避免(在运营商)与SQL

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

你想改变它 – Tom

+0

我想你应该有这个标记为甲骨文而不是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) 

编辑:我不使用甲骨文,但我“觉得”语法将是这个样子:

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