SQL在某些条件下发现常见和差异的一部分

时间:2014-04-28 11:32:02

标签: postgresql join inner-join

首先,我将描述整个想法。我有一个系统存储有关Projects正在进行的信息。每个项目都有很多Topics。每个项目每月修订一次。例如:

2014-01-01 Was added Project '1' in relation of 40 Topics
2014-01-01 Was added Project '2' in relation of 120 Topics
2014-02-01 Was added Project '1' in relation of 30 Topics
2014-02-01 Was added Project '2' in relation of 100 Topics

我想计算主题之间的差异,其中有多少是新的,有多少是结束的,有多少仍在继续。

我已根据enter image description here

尝试过了

创建一个查询。 表结构:

database=> \d project
                              Tabela "public.project"
    Kolumna     |   Typ   |                      Modyfikatory
----------------+---------+---------------------------------------------------------
 id             | integer | niepusty domyĹnie nextval('project_id_seq'::regclass)
 scid           | integer |
 starttime      | date    |


database=> \d topic
                              Tabela "public.topic"
    Kolumna     |   Typ   |                    Modyfikatory
----------------+---------+-----------------------------------------------------
 id             | integer | niepusty domyĹnie nextval('topic_id_seq'::regclass)
 project _id    | integer |
 topicengine_id | integer |
 parameter      | text    |
 description    | text    |
 severity       | text    |
 requirement_id | integer |
 topicparam_id  | integer |

我的第一次尝试是使用内部联接来计算on going主题:

SELECT t1.id 
FROM   topic t1 
       INNER JOIN topic t2 
               ON t1.id = t2.id 
       INNER JOIN project p1 
               ON p1.id = t1.project_id 
       INNER JOIN project p2 
               ON p2.id = t2.project_id 
WHERE  p1.id = 1101 
       AND p2.id = 1168 

但是每次结果都为null。谁能指出我在做错的地方?

1 个答案:

答案 0 :(得分:1)

主题ID似乎是主题的主键。 这意味着加入:t1.id = t2.id自己加入记录,因此t1.project_id等于t2.project_id,并且不能同时拥有两个值。 也许你的意思是在topicengine_id上​​加入t1和t2?