相关子查询中忽略mysql限制

mcvgt66p  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(431)

我有两张table: orders 以及 items . 每个 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
)

但就我的一生而言,我似乎无法构造一个查询来将订单过滤到那些最新项的type=2的订单
我还尝试了join的每个组合,试图克服被忽略的limit子句。什么都不管用。
我觉得这应该很简单。
lstz6jyr

lstz6jyr1#

您可能不需要使用 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 子句本身,以获取订单的第一个项类型值。
然后可以在派生表中使用此结果,并过滤掉第一个项类型为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

相关问题