我的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。
有人可以帮我解决这个问题吗?
答案 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)