PostgreSQL的全部外部连接

时间:2018-12-10 09:38:37

标签: postgresql outer-join

我创建了一个student表,其中列student_id为主键, student_namegender

我还有另一个表gender,它由gender_idgender组成。

gender_id中的

student引用表gender

表格数据如下:

学生桌

STUDENT_ID  STUDENT_NAME    GENDER
1            Ajith           1
2            Alan            1
3            Ann             2
4            Alexa           2
5            Amith           1
6            Nisha           2
7            Rathan          1
8            Rebecca         2
9            asdf            null
10           asd             null     
11           dbss            null

性别表

GENDER_ID   GENDER
1           Male
2           Female
3           Others

我的查询及其结果

SELECT  S.STUDENT_NAME,
        G.GENDER
FROM  STUDENTS S
FULL OUTER JOIN GENDER G ON G.GENDER_ID = S.GENDER 

结果给出12行,包括性别表中的其他值。

STUDENT_ID  STUDENT_NAME    GENDER
1             Ajith         Male
2             Alan          Male
3             Ann           Female
4             Alexa         Female
5             Amith         Male
6             Nisha         Female
7             Rathan        Male
8             Rebecca       Female
                            Others
9             asdf  
10            asd   
11            dbss  

我正在尝试限制特定的student_id

SELECT  S.STUDENT_ID,
        S.STUDENT_NAME,
        G.GENDER
FROM  STUDENTS S
FULL OUTER JOIN GENDER G ON G.GENDER_ID = S.GENDER
WHERE S.STUDENT_ID <> 11;

现在总行数减少到10。

STUDENT_ID  STUDENT_NAME    GENDER
1           Ajith           Male
2           Alan            Male
3           Ann             Female
4           Alexa           Female
5           Amith           Male
6           Nisha           Female
7           Rathan          Male
8           Rebecca         Female
9           asdf    
10          asd 

为什么第二行选择查询中的带有 Others 的值消失了? 我正在寻找导致此问题的原因。

2 个答案:

答案 0 :(得分:2)

这是因为NULL <> 11不是TRUE,而是NULL,并且结果中仅包含条件为TRUE的行。

您必须编写类似的内容

WHERE s.student_id IS DISTINCT FROM 11

答案 1 :(得分:1)

您的第二个选择查询返回的所有学生ID与11都不相同(extbase)的行。