2013-03-21 46 views
0

我有我的aanmeldingen表内的表结构:

SQL SELECT查询需要帮助

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行。

我只是无法弄清楚如何解决我的选择查询,以确保它不仅没有在Introduce_van并具有Introduce_van NULL返回Test3的(

有人能帮助我走出这个查询?

回答

0

当空值检查,它要么

is null 

is not null 

你的逻辑的其余部分几乎没问题。你必须移动null值的检查你的子查询外,

0

另一种方法是使用LEFT JOIN和过滤器使用IS NULL,而不是=! NULLNULL值。

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 ║ 
╚══════════╝  
+0

这将选择行,其中Introduce_van为空不到哪介绍面包车比将用户名 – 2013-03-21 01:03:38

+0

谢谢其他一些价值,你的解决方案为我工作。还要感谢所有试图帮助我的人。 – 2013-03-21 07:09:25

+0

不客气':D' – 2013-03-21 07:09:53

0

你的意思是 “现在我想选择所有的用户名都没有Introduce_van OR 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)