PostgreSql中的完全外部联接
我创建了一个包含PostgreSql中的完全外部联接,postgresql,outer-join,Postgresql,Outer Join,我创建了一个包含students的表,其中列student\u id作为主键, 学生姓名和性别 我还有一个表gender,它由gender\u id和gender组成 gender\u id中的student参考表gender 表数据如下所示: 学生表 STUDENT_ID STUDENT_NAME GENDER 1 Ajith 1 2 Alan 1 3 Ann
student
s的表,其中列student\u id
作为主键,
学生姓名
和性别
我还有一个表gender
,它由gender\u id
和gender
组成
gender\u 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
性别表
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
我试图限制一个特定的学生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;
为什么第二个select查询中包含其他值的一行消失了?
我正在试图找到这个问题的原因。这是因为NULL 11
不是TRUE
,而是NULL
,结果中只包括条件为TRUE
的行
你得写些像这样的东西
WHERE s.student_id IS DISTINCT FROM 11
第二个select查询返回学生id与11不同(
)的所有行。您好。了解左/右联接返回的内容:内部联接行加上由null扩展的不匹配的左/右表行。完全联接返回内部联接行并将所有不匹配的左表行和右表行以NULL扩展。始终知道作为外部联接的一部分,您需要什么样的内部联接。一个WHERE或INTERNAL ON,在外部联接ON删除任何由NULL扩展的行后,要求可能为NULL的扩展列不为NULL,即只保留内部联接行,即“将外部联接转换为内部联接”。你有。请总是用谷歌搜索错误消息&你的问题/问题/目标的许多清晰、简洁和具体的版本/措辞,有或没有你的特定字符串/名称&“site:stackoverflow.com”&标记并阅读许多答案。将发现的相关关键字添加到搜索中。如果你找不到答案,就发布,使用1个变体搜索作为标签的标题和关键字。请参见文本上方的向下投票箭头鼠标。当你有一个不重复的代码问题要发布时,请阅读并采取行动——清晰的规范、剪切粘贴和可运行的代码(带有小的代表性输入)和所需的输出。谢谢你提供的信息。