0

我的 aanmeldingen 表中有以下表结构:

username      varchar(16) NOT NULL
introduce_van varchar(16) NULL

我有以下 3 行数据:

Username Introduce_van   
Test1    NULL
Test2    Test1
Test3    NULL

现在我想选择所有不在 Introduce_van 中的用户名,并且 Introduce_van 的值为 NULL。

我用这个 sql 试了一下:

SELECT username 
FROM aanmeldingen 
WHERE username NOT IN
      (SELECT introduce_van  
       FROM aanmeldingen 
       WHERE introduce_van != 'NULL')

此查询返回:

Test2, Test3

所以我想如果我要添加:

AND introduce_van = 'NULL'

它只会返回 Test3。

但它返回 0 行。

我只是不知道如何修复我的选择查询以确保它只返回 Test3(不在 Introduce_van 中并且 Introduce_van 为 NULL。

有人可以帮我解决这个问题吗?

4

3 回答 3

0

您的意思是“现在我要选择所有用户名不在 Introduce_van 中Introduce_van 的值为 NULL”。???

如果是这样,请使用:

 SELECT Distinct username 
 FROM aanmeldingen a 
 WHERE introduce_van Is Null  
     Or Not exists 
      (SELECT * FROM aanmeldingen 
       WHERE introduce_van = a.userName)
于 2013-03-21T01:01:00.507 回答
0

检查空值时,它要么是

is null

或者

is not null

你的其余逻辑几乎没问题。您必须将空值检查移到子查询之外,

于 2013-03-21T00:56:22.530 回答
0

另一种方法是使用and not使用LEFT JOIN和过滤NULL值。IS NULL=! NULL

SELECT  a.UserName
FROM   tableName a
        LEFT JOIN tableName b
            ON a.username = b.Introduce_van
WHERE   b.Introduce_van IS NULL AND   
        a.Introduce_van IS NULL

输出

╔══════════╗
║ USERNAME ║
╠══════════╣
║ Test3    ║
╚══════════╝    
于 2013-03-21T00:57:27.517 回答