PostgreSql 中的全外连接

Full Outer Joins In PostgreSql

我创建了一个 table 的 student 列,其中列 student_id 作为主键, student_namegender.

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

student中的

gender_id指的是tablegender.

Tables 数据如下所示:

学生table

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

性别Table

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 行,包括来自性别 table.

Others
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 值的一行从第二个 select 查询中消失了? 我正在尝试找出此问题的原因。

那是因为NULL <> 11不是TRUE,而是NULL,结果中只包含条件为TRUE的行。

你必须写类似

的东西
WHERE s.student_id IS DISTINCT FROM 11

您的第二个 select 查询 returns student_id 与 11.

不同(<>)的所有行