我想通过 Database.raw 在查询生成器的 select 查询中获得 count 个结果,但是当我的主表为空时,除 Database.raw 结果外,我查询的所有字段均为null
。
这是我的查询:
const jobs = await Database.table('jobs')
.leftJoin('job_offers', 'jobs.id', 'job_offers.job_id')
.select([
Database.raw(`'job' as type`),
Database.raw('COUNT(jobs.id) as offers_count'),
'jobs.id', 'title', 'jobs.description', 'jobs.created_at',
])
.limit(limit).offset(offset)
我的查询结果是:
[
{
"type": "job",
"offers_count": 0,
"id": null,
"title": null,
"description": null,
"created_at": null
}
]
在上面的查询中,当我的[]
表中没有任何行时,结果必须为job
。
更新:
这是上述查询构建器方法的SQL命令,它们返回[]
作为结果
SELECT
'job' AS type,
jobs.id, jobs.title, description, jobs.created_at,
COUNT(job_offers.id) as offers_count
FROM jobs
LEFT JOIN job_offers ON jobs.id = job_offers.id
我的查询出了什么问题?
答案 0 :(得分:-2)
您正在使用leftJoin,如果您不希望结果为空,则应该使用innerJoin或join(两者都做同样的事情)。
const jobs = await Database.table('jobs')
.join('job_offers', 'jobs.id', 'job_offers.job_id')
.select([
Database.raw(`'job' as type`),
Database.raw('COUNT(jobs.id) as offers_count'),
'jobs.id', 'title', 'jobs.description', 'jobs.created_at',
])
.limit(limit).offset(offset)