MySQL 相关子查询中忽略了 LIMIT
MySQL LIMIT ignored in correlated subquery
我有 2 个表:orders
和 items
。每个 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
我有 2 个表:orders
和 items
。每个 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