需要Sql select查询帮助

时间:2013-03-21 00:54:22

标签: mysql sql select

我的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。

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

3 个答案:

答案 0 :(得分:0)

检查空值时,它是

is null

is not null

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

答案 1 :(得分:0)

另一种方法是使用LEFT JOIN并使用IS NULL而非=! 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    ║
╚══════════╝    

答案 2 :(得分: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)