我想弄清楚这里有什么问题。基本上下面的查询查询表“配置文件” t1 ,然后再次使用NOT IN功能查询相同的表“配置文件”并从中获取profile_friends t2 并显示 t2 结果中未找到的ID的结果。
查询
SELECT t1.profile_id, t1.profile_username, t1.profile_name, t1.profile_friends
FROM PROFILES t1
WHERE t1.profile_id NOT IN (SELECT t2.profile_friends FROM PROFILES AS t2 WHERE t2.profile_id = '1')
以上查询和数据库结构的结果
此ID的 2,6,10 不应显示在此结果中。 ID ID 2 未显示,但为什么ID 6 且 10 正在显示?
但是当我尝试这段代码时它会起作用(请注意,我已经对值进行了硬编码)
SELECT t1.profile_id, t1.profile_username, t1.profile_name, t1.profile_friends
FROM PROFILES t1
WHERE t1.profile_id NOT IN (2,6,10)
答案 0 :(得分:2)
您必须考虑NULL
。与NULL
进行的任何常规比较(=,<>,>,<)均为NULL
。 NULL
的正确比较是IS NULL
此外,您的案例中似乎不需要子查询。
SELECT *
FROM profiles
WHERE profile_id <> 1
AND (profile_friends <> '1' OR profile_friends IS NULL) -- parentheses are important here
示例输出:
| PROFILE_ID | PROFILE_USERNAME | PROFILE_FRIENDS | |------------|------------------|-----------------| | 3 | username3 | (null) | | 4 | username4 | (null) | | 5 | username5 | (null) | | 7 | username7 | (null) | | 8 | username8 | (null) | | 9 | username9 | (null) |
这是 SQLFiddle 演示