Sequelize.js - 连接子句中的子选择

Posted

技术标签:

【中文标题】Sequelize.js - 连接子句中的子选择【英文标题】:Sequelize.js - subselect in join clause 【发布时间】:2018-06-02 07:39:45 【问题描述】:

我有两个表 - customerorder 具有一对多关系。我想在一个查询中检索所有客户数据和他的订单的总价值。

在原始 SQL 中是这样的:

select customer.*, o.total from customer 
  inner join (select sum(value) as total, customer_id from 
      order group by customer_id) as o 
  on customer.id=i.customer_id

我的问题是——如何在不写 SQL 的情况下在 Sequelize 中表达这个查询?这甚至可能吗?

【问题讨论】:

您查看过文档吗? docs.sequelizejs.com/manual/tutorial/… 是的,我没有找到问题的答案。我知道如何建模聚合函数和group by,但我不知道如何将这些东西放在子查询中。 【参考方案1】:

试试这个:

const query = `
  SELECT
    table_a.table_a_id AS "table_a.table_a_id",
    table_b.table_b_id AS "table_b.table_b_id"
  FROM 
    table_a
  LEFT JOIN
    (SELECT * FROM table_b) AS table_b
  ON
    table_a.table_b_id = table_b.table_b_id
`;

const options = 
  model: models.table_a,
  mapToModel: true,
  nest: true,
  raw: true,
  type: sequelize.QueryTypes.SELECT
;

let tableAs = await db.sequelize.query(query, options);

请注意,您需要在 select 语句中使用别名。似乎 Sequelize.js 通过名称中的点来区分表格。

警告:如果 table_a 和 table_b 具有“一对多”关系,则这不起作用,因为 table_bs 必须是数组。这似乎只是覆盖 table_b 而没有使其成为数组。

【讨论】:

【参考方案2】:

您好 xersee,首先您想以 sequalize.js 格式创建两个表 customer 和 order 然后将表 order 中的 value 列和 customer_id 列相加后将其放入一张表中 然后,只需将新表与 ORM 样式的客户表连接起来 请参考以下链接,它可能对您有所帮助。 How to make join querys using sequelize in nodejs

【讨论】:

欢迎来到 Stack Overflow!请始终引用重要链接中最相关的部分,以防目标站点无法访问或永久离线。谢谢! 您提供的链接没有说明任何关于建模子查询的内容。 请参考链接-:***.com/questions/27157687/…也许这会对你有所帮助。

以上是关于Sequelize.js - 连接子句中的子选择的主要内容,如果未能解决你的问题,请参考以下文章

Psql - from 子句中的子查询 - 不好的做法?

sequelize.js 中的字母数字 ID

BIGQUERY:连接谓词中的表不受支持的子查询

推荐学Java——数据表高级操作

推荐学Java——数据表高级操作

使用 FROM 子句中的子查询进行联接操作中的 SQL 语法错误