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方法在更大的查询中实现了它。谢谢你的例子。我想我在这方面一直在进步。