【问题标题】:Query Builder return null for join result and raw query in AdonisJS查询生成器为 AdonisJS 中的连接结果和原始查询返回 null
【发布时间】:2019-06-08 06:43:16
【问题描述】:

我想在查询生成器的 select 查询中通过 Database.raw 获得 count 结果,但是当我的主表为空时,我查询的所有字段都是null,除了 Database.raw 结果。

这是我的查询:

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

我的查询有什么问题?

【问题讨论】:

    标签: mysql node.js knex.js adonis.js


    【解决方案1】:

    您正在使用 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)

    【讨论】:

    • 很好的答案,但提供示例代码将帮助用户更好地理解它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 2017-01-01
    • 2021-05-29
    相关资源
    最近更新 更多