【问题标题】:Is there a way to run a raw JOIN with sequelize?有没有办法通过 sequelize 运行原始 JOIN?
【发布时间】:2021-09-25 08:38:15
【问题描述】:

有没有办法通过 sequelize 运行原始 JOIN?

下面是一个示例查询。我不能直接使用 JOIN,因为表 b 可以包含基于每个 group_id 表 a 的多条记录。我正在运行 WHERE id IN(子查询),结果对于大型数据集来说很慢。相比之下,JOIN 的表现更好。但是,我在 sequelize 中看不到执行原始 INNER JOIN 的选项。

TABLE A
|---------------------|------------------|
|          id         |       name       |
|---------------------|------------------|
|          12         |     John Doe     |
|---------------------|------------------|


TABLE B
|---------------------|------------------|------------------|
|          id         |        a_id      |     group_id     |
|---------------------|------------------|------------------|
|          1          |         12       |       415        |
|---------------------|------------------|------------------|
|          2          |         12       |       416        |
|---------------------|------------------|------------------|
|          3          |         12       |       417        |
|---------------------|------------------|------------------|
SELECT a.*
FROM a
INNER JOIN (SELECT DISTINCT b.a_id FROM b WHERE b.group_id IN (1,2,4,5,6)) as b ON b.a_id = a.id
ORDER BY a.updated_at DESC;

【问题讨论】:

  • 你试过include吗?
  • 我试过了。它不会让我加入原始 sql 查询。其他联接工作正常。

标签: node.js postgresql sequelize.js


【解决方案1】:

在核心 sequelize 上允许 2 个包含关键字 required 的连接

  1. required:true[default] 转换为 INNER JOIN。
  2. required:false 转换为 LEFT OUTER JOIN。

相同的参考: https://sequelize.org/master/manual/eager-loading.html

我认为 sequelize 没有任何适合您使用的东西,请尝试使用原始查询(如果您认为您的查询已优化):

来自官方文档的代码 sn-p:

const { QueryTypes } = require('sequelize');

await sequelize.query(
  'SELECT * FROM projects WHERE status = ?',
  {
    replacements: ['active'],
    type: QueryTypes.SELECT
  }
);

await sequelize.query(
  'SELECT * FROM projects WHERE status = :status',
  {
    replacements: { status: 'active' },
    type: QueryTypes.SELECT
  }
);

相同的参考: https://sequelize.org/master/manual/raw-queries.html

【讨论】:

    猜你喜欢
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多