当前位置: 首页 > 面试题库 >

MySQL如何返回唯一/不同的结果?

殳越
2023-03-14
问题内容

我正在运行以下MySQL查询,以查找没有手册(且车轮有黑轮等)的汽车

SELECT `cars`.* FROM `cars`
INNER JOIN wheels ON cars.id = wheels.car_id
LEFT OUTER JOIN manuals ON cars.id = manuals.car_id
WHERE (cars.created_at > '2010-09-09'
AND wheels.color = 'Black'
AND wheels.created_at < '2011-01-05'
AND manuals.car_id IS NULL)

查询的结果看起来正确,但是它两次返回ID为27的汽车。如何更改查询,以使所有结果都是唯一的(没有重复项)?


问题答案:

假定这cars.id是唯一的主键,那么其中的一种联接将导致笛卡尔乘积。也就是说:wheelsmanuals包含多个匹配项cars.id = 27

子查询通常是消除笛卡尔积的好工具。下面的示例查询显示了两种使用子查询的方法。

  1. 第一个子查询可确保我们只查看在2011年1月5日之前创建了该记录的黑色车轮汽车。该GROUP BY子句可确保我们每个仅返回一个记录w.car_id

  2. 第二个子查询(有时称为相关子查询)可确保在主查询中没有找到每辆汽车的手册。

未经测试,但传达了以下想法:

SELECT `cars`.* 
  FROM `cars`
       JOIN (
           SELECT w.car_id
             FROM wheels w
            WHERE w.color = 'Black'
              AND w.created_at < '2011-01-05'
         GROUP BY w.car_id
       ) wheels 
       ON cars.id = wheels.car_id
WHERE 
    cars.created_at > '2010-09-09'
AND
    NOT EXISTS (SELECT m.car_id FROM manuals m WHERE m.car_id = cars.id)


 类似资料:
  • 我调用了一个方法,它连接到另一个服务器,每次调用它,它都返回不同的数据。 我正在为调用该方法的类编写一个单元测试。我已经嘲笑了那个类,我希望它返回存根结果。它实际上使用工作,但是它每次都返回相同的数据。我希望它返回不同的数据,我希望能够指定它应该是什么。 我试着使用“doReturn-when”,它可以工作,但我无法让它返回不同的结果。我不知道怎么做。 我还尝试使用“when-thenReturn

  • 问题内容: 我将如何从记录中获取所有值,并使它们唯一。 记录 询问 任何帮助都会很棒。 问题答案: 您可以使用术语聚合。 搜索将返回如下内容: 聚合中的参数指定要包含在聚合结果中的最大术语数。如果需要所有结果,请将其设置为大于数据中唯一术语数的值。

  • 如何从记录中获取所有的值并使它们唯一。 记录 查询 任何帮助都会很好。

  • 问题内容: 我正在使用HSM和PKCS11处理密钥派生问题,目前我无法理解为什么我会看到完全不同的结果,这取决于我是否使用generateKey()方法,而不是使用crypto()方法。在这两种情况下,我都尝试将DESede / ECB / NoPadding算法用于结果,但是根据我用来生成结果的方法(deriveKey与加密),我看到了不同的结果。 退后一会儿,以给出高层次的概述…我正在使用Gl

  • 当我浏览包含使用headless选项的产品的页面时,我会得到不同的结果 对于同一个问题,一次我得到的结果没有排序,另一次得到的结果排序正确。 Selenium firefox浏览器: 根据这篇帖子: “firefox在使用headless选项时不会发送不同的标题”。 如何使用无头选项从刮擦中获得恒定的结果? 更新: 原来,广告弹出窗口隐藏了价格排序菜单。通过设置DebanjanB发布的恒定窗口大小

  • 问题内容: 当我抓取包含使用无头选项产品的页面时,我得到不同的结果。 对于同一个问题,一次我得到未排序的结果,而另一次我得到正确的排序顺序。 Selenium firefox浏览器: 根据这篇文章: “ firefox使用无头选项时不会发送不同的头”。 如何使用无头选项从抓取中获得恒定的结果? 更新: 事实证明,广告弹出窗口隐藏了价格排序菜单。通过设置DebanjanB发布的恒定窗口大小,解决了问