首页 > 解决方案 > 为什么 WHERE 条件会丢弃 LEFT JOIN 获得的内容?SQLITE

问题描述

3 个相关表的示例: 在此处输入图像描述

我做了以下 SELECT 来获取我感兴趣的所有相关数据(正确):

SELECT id, action, actions.uid, name, relation
FROM actions
LEFT JOIN (SELECT * FROM relations GROUP BY uid) USING (uid)
INNER JOIN users USING (uid)
GROUP BY actions.id;

并返回: 在此处输入图像描述

当我需要使用条件根据关系类型“删除”结果时,就会出现问题。

我进行以下查询以从先前的结果中丢弃“朋友”(关系):

SELECT id, action, actions.uid, name, relation
FROM actions
LEFT JOIN (SELECT * FROM relations GROUP BY uid) USING (uid)
INNER JOIN users USING (uid)
WHERE relation != 'friend'
GROUP BY actions.id;

但是它应该返回一个结果(Marie),它返回 0 个结果......

由于类型条件(例如“...WHERE 关系为 NULL”),我对获取 Marie 不感兴趣,我的查询应该通过丢弃来工作,因为它们属于过滤工具。

在此处输入图像描述

标签: sqlsqlitesubqueryleft-joininner-join

解决方案


尝试使用 coalesce(Relation,'') != 'friend'. 希望它有效


推荐阅读