这个问题在这里已有答案:
我创建了一个 student
的表,其中列 student_id
为主键, student_name
和 gender
.
我还有另一个表 gender
,它由 gender_id
和 gender
组成 .
gender_id
中的 gender_id
指的是表 gender
.
表数据如下所示:
Student 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
Gender 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行,包括性别表中的 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 值的一行从第二个选择查询中消失了?我正在努力找到这个问题的原因 .
2 回答
那是因为
NULL <> 11
不是TRUE
,而是NULL
,并且只有条件为TRUE
的行才包含在结果中 .你必须写类似的东西
您的第二个选择查询将返回student_id与11不同的所有行(
<>
) .