MySQL - 基于另一个表查询具有更新的行

时间:2018-05-28 19:44:35

标签: mysql one-to-many

我有一个名为listings的表格,其中包含许多字段,例如idnameaddress等。

我有另一个名为listing_updates的表格,其中包含许多相同的字段,例如idnameaddress以及状态字段,其值为NEWCANCELLEDCLOSED

列表包含许多商家信息更新(一对多)

我想要一个执行以下操作的查询:

选择该商家信息的最新更新为NEW状态

的所有商家信息

案例中的“最新更新”由具有最大id(自动递增)且具有正确列表关联的行定义。

希望如果我们将来添加更多状态,任何给出的答案都可以扩展到。

1 个答案:

答案 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,那么

SELECTFROMJOIN应该是非常自我解释的。在WHERE子句中,更新记录的id被限制为使用子查询的当前列表的所有更新的最后一个(MAX)id。选择status“NEW”的最后结果。这将丢弃所有列表,这些列表具有不同状态的最后更新。