【发布时间】:2020-10-09 15:32:07
【问题描述】:
我需要编写一个查询,我认为其中需要一个子查询。目前,我正在使用 DataGrip 将查询编写为原始 SQL 语句,并且需要在 postGres 服务器上工作。我正在使用 Laravel 编写这个查询需要在其中工作的应用程序。
编写查询所需的两个表是 media_files 和 statuses。两个表之间有一个链接: media_files.id = statuses.model_id
文件存储在media_files中,可以有pending和attached两种状态。文件的状态存储在状态。 statuses 表还可以包含其他事物的状态,例如任务、事件、用户等。
我需要一种方法来获取最后状态为 pending 的所有文件。有些文件甚至可能没有 pending 状态,可以忽略这些文件。
状态表可以保存同一个媒体文件的多个状态。因此,例如,您可以:
记录 1
media_files.id = 1
media_files.name = '简历文件'
statuses.id = 2
statuses.model_id = 1
statuses.model_type = 'App\MediaFile'
statuses.name = 'attached'
statuses.created_at = '2020-06-16 17:39:08'
记录 2
media_files.id = 1
media_files.name = '简历文件'
statuses.id = 1
statuses.model_id = 1
statuses.model_type = 'App\MediaFile'
statuses.name = '待定'
statuses.created_at = '2020-06-14 17:30:00'
我已开始查询,但它似乎无法正常工作:
select media_files.*, (
select name
from statuses
where model_id = media_files.id
and model_type = 'App\File'
order by statuses.created_at desc
limit 1
)
as latest_status
from media_files
inner join statuses on statuses.model_id = media_files.id
where statuses.model_type = 'App\Entities\Media\File'
order by media_files.id desc;
【问题讨论】:
标签: mysql sql laravel postgresql subquery