我有2个表:orders
和items
。每个order
有许多items
。每个item
都有一个type
。我想要一个查询,该查询返回MOST RECENT项目具有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
)
但是对于我来说,我似乎无法制定查询来过滤订单中MOST最近项目的类型为2的订单
我还尝试了JOIN的每种组合,以尝试克服被忽略的LIMIT子句。什么都没有。
我觉得这应该很简单。
答案 0 :(得分:1)
您可能不需要使用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
子句本身中使用Correlated Subquery,以获取订单的第一个商品类型值。 尝试以下操作:
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