Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSql中的完全外部联接_Postgresql_Outer Join - Fatal编程技术网

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个变体搜索作为标签的标题和关键字。请参见文本上方的向下投票箭头鼠标。当你有一个不重复的代码问题要发布时,请阅读并采取行动——清晰的规范、剪切粘贴和可运行的代码(带有小的代表性输入)和所需的输出。谢谢你提供的信息。