SQLite中<>运算符失效:查询仍返回指定用户数据如何解决
解决你的SQL查询排除'david'的问题
嘿,这个问题我太熟了——本质是SQL运算符优先级在捣乱!你写的原查询里,AND的优先级比OR高,所以实际执行的逻辑是:
要么
friends.user_a = users.id,要么(friends.user_b = users.id且users.username <> 'david')
这就导致当friends.user_a匹配到david的id时,不管username是什么都会被返回,自然就漏掉了排除david的条件。
修改后的正确查询
你只需要把OR连接的两个条件用括号括起来,让它们先作为一个整体判断,再和排除david的条件结合:
SELECT username FROM users INNER JOIN friends WHERE (friends.user_a = users.id OR friends.user_b = users.id) AND users.username <> 'david';
额外优化方案(可选)
如果想让逻辑更清晰,也可以用IN来简化条件,可读性更强:
SELECT username FROM users INNER JOIN friends WHERE users.id IN (friends.user_a, friends.user_b) AND users.username <> 'david';
这样就能确保所有返回的username都不会是'david'啦!
内容的提问来源于stack exchange,提问作者JohnWick
相关产品推荐
相关产品推荐

