代码之家  ›  专栏  ›  技术社区  ›  mowgli

我需要在“in(SELECT MAX(id)”子查询中重复WHERE子句吗?

  •  0
  • mowgli  · 技术社区  · 6 年前

    我是否也需要在这个子查询中指定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子句的情况下,结果似乎是一样的,但是如果没有大量不同的用户和消息,就很难进行测试。所以我需要更加确定。

    是否有必要像这样重复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
    

    这两个都是我代码中的简化示例。我希望我的问题有道理。

    2 回复  |  直到 6 年前
        1
  •  1
  •   ahmad    6 年前

    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
    

    select x from y where id in(1, 2, 3)

    对于相同的查询,类似于运行以下2个查询:

    Query 1: SELECT MAX(id) FROM messages WHERE sender = '.$myid.' AND read != 1 GROUP BY conversation
    
    Result: 1, 2, 3
    

    第二个查询是:

    Query 2: SELECT title, message FROM messages WHERE id IN (1, 2, 3) ORDER BY id DESC
    
        2
  •  0
  •   mightycommander    6 年前

    子查询select在解析的参数方面完全独立于第一个查询,因此必须再次输入where子句信息