一对多mysql查询基于另一个表更新的行

fwzugrvs  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(311)

我有一张table叫 listings 有很多领域,比如 id , name , address 等。
我还有一张table叫 listing_updates 有很多相同的领域,比如 id , name , address 还有一个状态字段,其值如下 NEW , CANCELLED , CLOSED 等等。
一个列表有许多列表更新(一对多)
我需要执行以下操作的查询:
选择列表中该列表的最新更新所在的所有列表 NEW 地位
案例中的“最新更新”由具有最大值的行定义 id (自动递增)具有正确的列表关联。
希望,如果我们在将来添加更多的状态,给出的任何答案都能扩展到。

mpgws1up

mpgws1up1#

下面的查询选择所有 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'
``` `SELECT` ,  `FROM` 以及 `JOIN` 如果你知道基本的sql,应该是很容易解释的。在 `WHERE` 条款 `id` 更新记录的时间限制为最后一个( `MAX` )使用子查询的当前列表的所有更新的id。最后一个结果是 `status` 选择“新建”。这将丢弃所有具有不同状态的上次更新的列表。

相关问题