我有一个名为listings
的表格,其中包含许多字段,例如id
,name
,address
等。
我有另一个名为listing_updates
的表格,其中包含许多相同的字段,例如id
,name
,address
以及状态字段,其值为NEW
,CANCELLED
,CLOSED
等
列表包含许多商家信息更新(一对多)
我想要一个执行以下操作的查询:
选择该商家信息的最新更新为NEW
状态
案例中的“最新更新”由具有最大id
(自动递增)且具有正确列表关联的行定义。
希望如果我们将来添加更多状态,任何给出的答案都可以扩展到。
答案 0 :(得分:0)
以下Query选择最新更新listings
“新”的所有status
:
SELECT
l.*,
u.status
FROM
listings AS l
INNER JOIN listing_updates AS u ON (l.id = u.listing_id)
WHERE
u.id = (
SELECT MAX(id)
FROM listing_updates AS u2
WHERE u2.listing_id = l.id
)
AND u.status = 'NEW'
如果您了解基本SQL,那么 SELECT
,FROM
和JOIN
应该是非常自我解释的。在WHERE
子句中,更新记录的id
被限制为使用子查询的当前列表的所有更新的最后一个(MAX
)id。选择status
“NEW”的最后结果。这将丢弃所有列表,这些列表具有不同状态的最后更新。