gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:28:15 24 4
gpt4 key购买 nike

我有 2 个表:ordersitems。每个 order 都有很多 items。每个 item 都有一个 type。我想要一个查询,该查询返回所有订单,其中最新商品具有 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) 中假设“第一个项目”的定义。尝试以下查询:

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

  • 或者,您可以使用 Correlated SubquerySelect 子句本身中,获取订单的第一个项目类型值。
  • 然后您可以在 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

关于MySQL LIMIT 在相关子查询中被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52796386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com