【发布时间】:2018-10-02 16:34:47
【问题描述】:
我还需要在这个子查询中指定 WHERE 子句吗?
SELECT title, message FROM messages WHERE sender = '.$myid.' AND read != 1 AND id
IN (SELECT MAX(id) FROM messages GROUP BY conversation) ORDER BY id DESC
似乎有/没有重复 WHERE 子句的结果是相同的,但是如果没有很多不同的用户和消息,很难测试。所以我需要更加确定。
是否需要像这样重复 WHERE 子句????,还是 IN 子查询已经被第一个 WHERE 子句缩小了范围? (我假设是后者,但我不确定)。
SELECT title, message FROM messages WHERE sender = '.$myid.' AND read != 1 AND id
IN (SELECT MAX(id) FROM messages WHERE sender = '.$myid.' AND read != 1 GROUP BY conversation) ORDER BY id DESC
两者都是我的代码中的简化示例。我希望我的问题有意义。
【问题讨论】:
-
当然,子查询中的 where 是必需的,但外部查询中的那些并不是真正需要的,因为您使用子查询请求确切的 id
-
@ahmad 你的意思是我可以/应该这样做?
SELECT title, message FROM messages WHERE id IN (SELECT MAX(id) FROM messages WHERE sender = '.$myid.' AND read != 1 GROUP BY conversation) ORDER BY id DESC -
是的,外面的那些并没有真正做任何事情,就像你在子查询中做的一样。
-
好的,我刚刚测试过,我得到了相同的结果(它也可以)。这有点过头了,所以我想我必须相信 WHERE 子句在子查询中就足够了,就像你说的那样。我需要更好地理解它并对其进行更多测试
-
你应该发布一个答案,如果你有的话,可能会给出一些解释:)