2016-09-16 205 views
0

我有包含departmentID的查询。我希望结果不予退还2个或3系出约25SQL查询 - 限制结果

select i.personID, c.name, c.departmentID, se.sectionID 
from individual i 
INNER JOIN Section se ON se.teacherPersonID = i.personID 
INNER JOIN Course c ON c.courseID = se.courseID 
INNER JOIN Calendar cal ON cal.calendarID = c.calendarID and c.calendarID = 32 INNER JOIN SchoolYear sy on sy.endyear = cal.endyear and sy.active = 1 
INNER JOIN activeTrial at ON at.trialID = se.trialID 
inner join contact con on con.personID = i.personID 
Where c.departmentID is not NULL 
order by c.departmentID 
+0

在SQL Server,你可以使用 “TOP(N)” 的功能,如: SELECT TOP(N)* FROM表 其中N是您想要的行数。在Oracle中,你必须添加“WHERE RowNum rualmar

+1

你能澄清一些吗?你想要的结果是“不返回2-3分”?你有这些部门或其他数据你想删除它们的ID? –

+1

为什么不试试'Where IsNull(c.departmentID,-1)不在(-1,2,3,5)'中? – AVK

回答

0

使你不希望数据显示部门ID的4,5假设,和6:

WHERE c.departmentID IS NOT NULL AND c.departmentID NOT IN (4, 5, 6) 
0

通常,不要在where子句中使用硬编码,而应创建一个表,如exclusion_department,并在其中存储排除的ID。然后在您的查询中,您将离开加入该表的ID为NULL。祝你好运。

0

这将起作用,前提条件是c.departmentID是第一个键以非负值开始并递增的关键。

SELECT i.personID, c.name, c.departmentID, se.sectionID 
    FROM individual i 
    INNER JOIN Section se ON se.teacherPersonID = i.personID 
    INNER JOIN Course c ON c.courseID = se.courseID 
    INNER JOIN Calendar cal ON cal.calendarID = c.calendarID 
      and c.calendarID = 32 
    INNER JOIN SchoolYear sy on sy.endyear = cal.endyear 
      and sy.active = 1 
    INNER JOIN activeTrial at ON at.trialID = se.trialID 
    INNER JOIN contact con on con.personID = i.personID 
    WHERE IsNull(c.departmentID,-9999) NOT IN (-9999,2,3,5) 
    ORDER BY c.departmentID