我创建了一个student
表,其中列student_id
为主键,
student_name
和gender
。
我还有另一个表gender
,它由gender_id
和gender
组成。
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 的值消失了? 我正在寻找导致此问题的原因。
答案 0 :(得分:2)
这是因为NULL <> 11
不是TRUE
,而是NULL
,并且结果中仅包含条件为TRUE
的行。
您必须编写类似的内容
WHERE s.student_id IS DISTINCT FROM 11
答案 1 :(得分:1)
您的第二个选择查询返回的所有学生ID与11都不相同(extbase
)的行。