请帮助我理解SQL中的此查询

如何解决请帮助我理解SQL中的此查询

| 我正在阅读sql Antipatterns,发现此查询真的很难理解:
SELECT
    bp1.product_id,b1.date_reported AS latest,b1.bug_id 
FROM
    Bugs b1
    JOIN 
    BugsProducts bp1 ON (b1.bug_id = bp1.bug_id) 
    LEFT OUTER JOIN
    (
      Bugs AS b2
      JOIN 
      BugsProducts AS bp2 ON b2.bug_id = bp2.bug_id
    )
     ON bp1.product_id = bp2.product_id AND 
         (b1.date_reported < b2.date_reported OR b1.date_reported = b2.date_reported
          AND
          b1.bug_id < b2.bug_id
         )
WHERE
    b2.bug_id IS NULL;
请向我解释一下sql专家。。谢谢!     

解决方法

        向我显示错误/产品,根据日期/ ID,以后没有错误了 您可以将代码简化为伪代码
SELECT
    pair1 data
FROM
    pair1
    LEFT OUTER JOIN
    pair2
     ON same product,1st date <= 2nd date,1st internal id <= 2nd internal id
WHERE
    no such pair2
仅供参考,作者:SO用户Bill Karwin https://stackoverflow.com/users/20860     ,        看来问题中的查询是
good
模式。我发现它令人困惑,并将其重写为:
SELECT
    bp1.product_id,b1.date_reported AS latest,b1.bug_id 
FROM Bugs b1
INNER JOIN BugsProducts bp1 ON (b1.bug_id = bp1.bug_id) 
WHERE NOT EXISTS 
(
  SELECT * FROM Bugs AS b2
  INNER JOIN BugsProducts AS bp2 ON (b2.bug_id = bp2.bug_id)
  WHERE (bp1.product_id = bp2.product_id) 
     AND 
     (
        (b1.date_reported < b2.date_reported) OR 
        (b1.date_reported = b2.date_reported AND b1.bug_id < b2.bug_id)
     )
我强烈怀疑该代码与问题中的查询具有相同的性能(无论如何在MySQL上)。 以防万一,人们想知道: http://dev.mysql.com/doc/refman/5.5/zh-CN/exists-and-not-exists-subqueries.html   传统上,EXISTS子查询以SELECT *开头,但可以以SELECT 5或SELECT column1或其他任何内容开头。 MySQL会忽略此类子查询中的SELECT列表,因此没有区别 真的很想知道与此“好”模式相关的反模式。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?