SQL SELECT JOIN FILTER

时间:2015-11-11 16:21:19

标签: sql select join where

我尝试尽可能好地解释问题。

我有多个表格:

项目,小组,期间。

这三者的连接表称为project_status。

我会快速展示内容

项目

| projectID | name | date |
| ------------------------|
| 1         | test | 2015 |
| 2         | test | 2015 |

| groupID| name |
| --------------|
| 1      | ab   |
| 2      | cd   |

期间

| periodID  | status   |
| ---------------------|
| 1         | 0        | #inactive
| 2         | 1        | #active
| 3         | 2        | #new

项目统计

| projectID | groepID | periodID |
| -------------------------------|
| 1         | 1       | 2        | #active period
| 1         | 1       | 3        | #new period

现在你可以选择一个时期。周期是活跃的,然后我不显示 项目,因为它正在使用(活动)。现在,当我选择状态为new的句点时,必须进行检查以确定:

  • 此项目是否已进入新时期

问题是当我写一个查询时,总是存在活动期。我怎么能写一个只检查状态为新的项目状态的查询

我尝试了以下查询

SELECT projectID, name
FROM project
WHERE projectID IN
(
    SELECT ps.projectID
    FROM project_status as ps
    JOIN period as per
    ON ps.periodID = per.periodID
    WHERE per.status = 0
    AND per.stats != 2
)
OR projectID NOT IN
(
    SELECT projectID
    FROM project_status
)

2 个答案:

答案 0 :(得分:1)

您的查询看起来正确。 只删除
AND per.periode_status!= 2 什么是periode_status?你没解释

WHERE per.status = 0
AND per.periode_status != 2 -- remove it

答案 1 :(得分:0)

你可以使用交叉申请,像这样选择projectID&名称where periodID = 3:

{{1}}