PostgreSql 中的全外连接
Full Outer Joins In PostgreSql
我创建了一个 table 的 student
列,其中列 student_id
作为主键,
student_name
和 gender
.
我还有一个 table gender
,它由 gender_id
和 gender
组成。
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.
不同(<>
)的所有行
我创建了一个 table 的 student
列,其中列 student_id
作为主键,
student_name
和 gender
.
我还有一个 table gender
,它由 gender_id
和 gender
组成。
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.
不同(<>
)的所有行