我有两张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子句。什么都不管用。
我觉得这应该很简单。
1条答案
按热度按时间lstz6jyr1#
您可能不需要使用
Exists()
条款。可以直接将相关子查询的结果与值进行比较(2
)在Where
. 我假设“第一项”的定义来自您尝试的查询(ORDER BY id DESC LIMIT 1
). 尝试以下查询:或者,您可以在
Select
子句本身,以获取订单的第一个项类型值。然后可以在派生表中使用此结果,并过滤掉第一个项类型为2的情况。
请尝试以下操作: