Sequelize.js - 连接子句中的子选择
Posted
技术标签:
【中文标题】Sequelize.js - 连接子句中的子选择【英文标题】:Sequelize.js - subselect in join clause 【发布时间】:2018-06-02 07:39:45 【问题描述】:我有两个表 - customer
和 order
具有一对多关系。我想在一个查询中检索所有客户数据和他的订单的总价值。
在原始 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 - 连接子句中的子选择的主要内容,如果未能解决你的问题,请参考以下文章