如何在选择查询中使用数据填充外键字段,而不仅仅是外键 ID?

喷气背包

我有 2 张桌子,上面有班级和科目。

  • 班级(ID,姓名,student_count)
  • 主题(ID,名称,class_id)

我想在 select 查询中使用 name、student_count 和 id 填充 class_id。如何使用 SQL 或 Knex 执行此操作?

我尝试使用 join,但我只得到一个字段,而不是一行中的所有字段。

预期的结果是:

subject{
   name: "data"
   id: "data"
   class: {
     id: "data"
     name: "data"
     student_count: "data"
  }
}

顺便说一句,用 Knex 或普通 SQL 回答会有所帮助!

米卡桑德兰

您必须使用内部联接或左联接。

在 SQL 中,它看起来像这样:

SELECT
      s.id            AS subject_id
    , s.name          AS subject_name
    , c.id            AS class_id
    , c.name          AS class_name
    , c.student_count AS class_student_count
FROM subjects s
INNER JOIN class ON s.class_id = c.id
WHERE s.id = 1

在 Knex 中,它看起来像这样:

getOne: () => knex
    .select(   's.id AS subject_id'
             , 's.name AS subject_name'
             , 'c.id AS class_id'
             , 'c.name AS class_name'
             , 'c.student_count AS class_student_count'
           )
    .from('subjects AS s')
    .innerJoin('class AS c', 's.class_id', 'c.id')
    .where('s.id': 1)

您将获得一个以 AS 后的变量名称作为字段名称的对象。要使其成为您想要的格式,您必须创建一个映射器函数:

function mapToWantedFormat(subject) {
  return {
    name: subject.subject_name,
    id: subject.subject_id
    class: {
      id: subject.class_id,
      name: subject.class_name,
      student_count: subject.class_student_count
    }
  };
};

例如,它是这样调用的:

module.exports.getOne = async (req, res, next) => {
  try {
    const subject = await getOne();
    if (subject) {
      res.status(200).json(mapToWantedFormat(subject));
    } else {
      res.status(404).json();
    }
  } catch (error) {
    next(error);
  }
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在MongoEngine查询中获取引用对象的数据,而不仅仅是id

来自分类Dev

如何在django中获取相关模型的所有字段而不仅仅是id

来自分类Dev

收到的不仅仅是删除事件的ID?

来自分类Dev

显示外键数据(名称等),而不仅仅是 HTML 表中的外键

来自分类Dev

如何通过publishAdd()-notification获得添加的记录(不仅仅是ID)?

来自分类Dev

如何获取用户信息而不仅仅是ID序列化?

来自分类Dev

使用外键不仅仅是为了限制

来自分类Dev

通过广告组加载广告素材信息,而不仅仅是广告素材ID

来自分类Dev

Redis-不仅仅是键查询

来自分类Dev

SQL获取特定列,不仅仅是外键

来自分类Dev

ZF2 Ajax 调用返回所有信息,而不仅仅是发送的 id

来自分类Dev

如何在RethinkDB中使用不仅仅是主键的原子更新?

来自分类Dev

如何在MVC中使用SQL查询显示所有行数据而不仅仅是显示第一行

来自分类Dev

需要一个在每个ID上运行的脚本,而不仅仅是在最后一个ID上运行的脚本

来自分类Dev

Odoo 11:在 ir.cron 的调用方法中获取 cron id 或名称,这些方法是手动创建的,而不仅仅是从 XML 创建的

来自分类Dev

add_header需要3个参数,而不仅仅是键/值

来自分类Dev

Identity 3.0-如何在分层应用程序中使用AspNetUsers ID作为外键

来自分类Dev

如何在SQL Server中的表中使用外键ID?

来自分类Dev

在表格单元中使用组件,而不仅仅是字符串

来自分类Dev

如何将文件上传到数据库,而不仅仅是使用php的服务器

来自分类Dev

ORA-01790数据类型:如何添加使用名称中的文本的能力,而不仅仅是数字

来自分类Dev

如何在列表中分配变量,而不仅仅是列表元素?(对于python)

来自分类Dev

如何在整个班级中访问约束,而不仅仅是在我设置的地方?

来自分类Dev

XML连接:如何使用标记标签连接节点,而不仅仅是XSLT值

来自分类Dev

如何使用Checkstyle Gradle插件测试不仅仅是Java文件的内容

来自分类Dev

如何使用 Sinon 测试是否已等待(而不仅仅是创建)承诺?

来自分类Dev

正则表达式来识别特定的字符串,而不仅仅是键

来自分类Dev

如何在C#中使用Linq方法语法检索具有相同外键ID的多个列值?

来自分类Dev

如何在Canvas中创建选择框以选择它触摸的所有对象,而不仅仅是它包含的对象?

Related 相关文章

  1. 1

    在MongoEngine查询中获取引用对象的数据,而不仅仅是id

  2. 2

    如何在django中获取相关模型的所有字段而不仅仅是id

  3. 3

    收到的不仅仅是删除事件的ID?

  4. 4

    显示外键数据(名称等),而不仅仅是 HTML 表中的外键

  5. 5

    如何通过publishAdd()-notification获得添加的记录(不仅仅是ID)?

  6. 6

    如何获取用户信息而不仅仅是ID序列化?

  7. 7

    使用外键不仅仅是为了限制

  8. 8

    通过广告组加载广告素材信息,而不仅仅是广告素材ID

  9. 9

    Redis-不仅仅是键查询

  10. 10

    SQL获取特定列,不仅仅是外键

  11. 11

    ZF2 Ajax 调用返回所有信息,而不仅仅是发送的 id

  12. 12

    如何在RethinkDB中使用不仅仅是主键的原子更新?

  13. 13

    如何在MVC中使用SQL查询显示所有行数据而不仅仅是显示第一行

  14. 14

    需要一个在每个ID上运行的脚本,而不仅仅是在最后一个ID上运行的脚本

  15. 15

    Odoo 11:在 ir.cron 的调用方法中获取 cron id 或名称,这些方法是手动创建的,而不仅仅是从 XML 创建的

  16. 16

    add_header需要3个参数,而不仅仅是键/值

  17. 17

    Identity 3.0-如何在分层应用程序中使用AspNetUsers ID作为外键

  18. 18

    如何在SQL Server中的表中使用外键ID?

  19. 19

    在表格单元中使用组件,而不仅仅是字符串

  20. 20

    如何将文件上传到数据库,而不仅仅是使用php的服务器

  21. 21

    ORA-01790数据类型:如何添加使用名称中的文本的能力,而不仅仅是数字

  22. 22

    如何在列表中分配变量,而不仅仅是列表元素?(对于python)

  23. 23

    如何在整个班级中访问约束,而不仅仅是在我设置的地方?

  24. 24

    XML连接:如何使用标记标签连接节点,而不仅仅是XSLT值

  25. 25

    如何使用Checkstyle Gradle插件测试不仅仅是Java文件的内容

  26. 26

    如何使用 Sinon 测试是否已等待(而不仅仅是创建)承诺?

  27. 27

    正则表达式来识别特定的字符串,而不仅仅是键

  28. 28

    如何在C#中使用Linq方法语法检索具有相同外键ID的多个列值?

  29. 29

    如何在Canvas中创建选择框以选择它触摸的所有对象,而不仅仅是它包含的对象?

热门标签

归档