首页 文章

完全外部联接表现不同[重复]

提问于
浏览 61
-1

这个问题在这里已有答案:

我创建了一个 student 的表,其中列 student_id 为主键, student_namegender .

我还有另一个表 gender ,它由 gender_idgender 组成 .

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 回答

  • 2

    那是因为 NULL <> 11 不是 TRUE ,而是 NULL ,并且只有条件为 TRUE 的行才包含在结果中 .

    你必须写类似的东西

    WHERE s.student_id IS DISTINCT FROM 11
    
  • 1

    您的第二个选择查询将返回student_id与11不同的所有行( <> ) .

相关问题