MySQL不在子查询中

MySQL不在子查询中,mysql,sql,Mysql,Sql,我正在做一个查询,非常困惑。我把它浓缩成下面的东西 SELECT pf.id, pf.privacy FROM feed pf WHERE ( pf.user_id != 1 AND pf.privacy < 2 ) AND NOT ( SELECT pd.p_for FROM prfor pd WHERE pd.user

我正在做一个查询,非常困惑。我把它浓缩成下面的东西

SELECT
   pf.id, 
   pf.privacy
FROM 
   feed pf
WHERE 
   (
      pf.user_id != 1 
      AND pf.privacy < 2
   ) 
   AND NOT (
      SELECT 
         pd.p_for 
      FROM 
         prfor pd 
      WHERE 
         pd.user_id = 1 
         AND pd.pfeed_id = pf.id 
         AND pd.p_for = 1 LIMIT 1
   )
我从feed获取数据,其中user_id不是当前用户,本例为1,隐私设置小于2。我想检查当前用户是否回复过,换句话说,在prfor表中没有当前用户对应该提要项的行

在这一点上,我的逻辑已经消失了,我无法理解它应该如何运作。对于这类事情,它需要一个子查询吗?或者一个连接可以做到吗

在最后一个查询中,也有两个连接,但这似乎对下面的结果没有影响

SELECT
   pf.id, 
   pf.privacy
FROM 
   feed pf
WHERE 
   (
      pf.user_id != 1 
      AND pf.privacy < 2
   ) 
   AND NOT (
      SELECT 
         pd.p_for 
      FROM 
         prfor pd 
      WHERE 
         pd.user_id = 1 
         AND pd.pfeed_id = pf.id 
         AND pd.p_for = 1 LIMIT 1
   )
感谢您提供的任何见解。

您必须使用“不存在”:

您必须使用“不存在”:


如果pf.id不在prfor中,则应在for测试中使用or not in

    SELECT
    pf.id, pf.privacy
    FROM feed pf
    WHERE (pf.user_id != 1 AND pf.privacy < 2) AND  pf.user_id  NOT IN 
    (SELECT pf.id FROM prfor pd WHERE pd.user_id = 1 AND pd.pfeed_id = pf.id AND pd.p_for = 1 LIMIT 1)
还是不存在

    You should use or not in  
    SELECT
    pf.id, pf.privacy
    FROM feed pf
    WHERE (pf.user_id != 1 AND pf.privacy < 2) AND   NOT EXIST
    (SELECT pd.p_for FROM prfor pd WHERE pd.user_id = 1 AND pd.pfeed_id = pf.id AND pd.p_for = 1 LIMIT 1)

如果pf.id不在prfor中,则应在for测试中使用or not in

    SELECT
    pf.id, pf.privacy
    FROM feed pf
    WHERE (pf.user_id != 1 AND pf.privacy < 2) AND  pf.user_id  NOT IN 
    (SELECT pf.id FROM prfor pd WHERE pd.user_id = 1 AND pd.pfeed_id = pf.id AND pd.p_for = 1 LIMIT 1)
还是不存在

    You should use or not in  
    SELECT
    pf.id, pf.privacy
    FROM feed pf
    WHERE (pf.user_id != 1 AND pf.privacy < 2) AND   NOT EXIST
    (SELECT pd.p_for FROM prfor pd WHERE pd.user_id = 1 AND pd.pfeed_id = pf.id AND pd.p_for = 1 LIMIT 1)

请发布prfor和feed的示例输入表、您当前获得的输出以及您想要获得的输出。pd.p_for的含义是什么?因为您的subselect返回p_for,但您必须对其进行处理,而不仅仅是不。你不可能存在,也不可能不存在,但你不能只是说“不”,让我再戳一戳,如果我不能让它工作,你会带着更多的问题回来。在这一点上,两种解决方案都没有返回我所期望的结果。我不知道存在或存在,这是有道理的,但不起作用。感谢您的建议。请发布prfor和feed的示例输入表、您当前获得的输出以及您想要获得的输出。pd.p_for的含义是什么?因为您的subselect返回p_for,但您必须对其进行处理,而不仅仅是不。你不可能存在,也不可能不存在,但你不能只是说“不”,让我再戳一戳,如果我不能让它工作,你会带着更多的问题回来。在这一点上,两种解决方案都没有返回我所期望的结果。我不知道存在或存在,这是有道理的,但不起作用。谢谢你的建议。我现在已经尝试了这个和上面下面的建议,但没有让它做我想要的。我会再戳一戳,看看我错过了什么。谢谢。我现在已经尝试了上面和下面的建议,但没有让它达到我想要的效果。我会再戳一戳,看看我错过了什么。谢谢。我终于用notexists方法在更大的查询中实现了它。谢谢你的例子。我在这方面一直在进步…我想。我终于用notexists方法在更大的查询中实现了它。谢谢你的例子。我想我在这方面一直在进步。