MySQL 相关子查询中忽略了 LIMIT

MySQL LIMIT ignored in correlated subquery

我有 2 个表:ordersitems。每个 order 有很多 items。每个 item 都有一个 type。我想要查询 returns 所有订单,其中最近的商品有 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
)

但对于我来说,我似乎无法制定一个查询来过滤那些最近的商品类型为 2

的订单

我还尝试了 JOIN 的所有组合,以尝试克服被忽略的 LIMIT 子句。没有任何效果。

我觉得这样应该很简单。

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

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