在相关子查询中忽略了MySQL LIMIT

时间:2018-10-13 19:12:59

标签: mysql limit correlated-subquery

我有2个表:ordersitems。每个order有许多items。每个item都有一个type。我想要一个查询,该查询返回MOST RECENT项目具有type = 2

的所有订单

我可以构建一个相关的EXISTS子句,该子句过滤到其中任何项目具有type=2

的订单
SELECT * FROM orders 
WHERE EXISTS(
    SELECT NULL 
    FROM items 
    WHERE order_id = orders.id
    AND type=2 
    ORDER BY id DESC 
    LIMIT 1
)

但是对于我来说,我似乎无法制定查询来过滤订单中MOST最近项目的类型为2的订单

我还尝试了JOIN的每种组合,以尝试克服被忽略的LIMIT子句。什么都没有。

我觉得这应该很简单。

1 个答案:

答案 0 :(得分:1)

您可能不需要使用Exists()子句。您可以直接将相关子查询的结果与2中的值(Where)进行比较。我假设您尝试查询(ORDER BY id DESC LIMIT 1)中定义了“第一项”。尝试以下查询:

SELECT o.* 
FROM orders AS o 
WHERE 2 = (SELECT type 
           FROM items 
           WHERE order_id = o.id 
           ORDER BY id DESC LIMIT 1)

  • 或者,您可以在Select子句本身中使用Correlated Subquery,以获取订单的第一个商品类型值。
  • 然后您可以在Derived table中使用此结果,并过滤掉第一项类型= 2的情况。

尝试以下操作:

SELECT dt.* 
FROM 
(
 SELECT o.*, 
        (SELECT type 
         FROM items 
         WHERE order_id = o.id 
         ORDER BY id DESC LIMIT 1) AS first_item_type
 FROM orders AS o 
) AS dt 
WHERE dt.first_item_type = 2