【问题标题】:How to use LEFT JOIN LATERAL in typeorm?如何在 typeorm 中使用 LEFT JOIN LATERAL?
【发布时间】:2022-04-27 17:39:53
【问题描述】:

我想在 TypeOrm 中使用以下查询,但找不到将其转换为 TypeOrm 的方法。

感谢任何帮助。

SELECT * FROM blocked_times bt 
 LEFT JOIN LATERAL (
      SELECT * FROM bookings bk WHERE bt."startTime" < bk."endTime"
 ) bk ON bk."clinicId" = bt."clinicId"

【问题讨论】:

  • 你看过this GitHub issue吗?看起来它仍然缺乏支持。
  • 是的@Ryan 我看到了

标签: postgresql typeorm


【解决方案1】:

我与这个问题斗争了几个小时,发现了一个 hack

      queryBuilder.leftJoin("(SELECT 1)", "dummy", "TRUE LEFT JOIN LATERAL (SELECT * FROM bookings bk WHERE bt.startTime < bk.endTime) bk ON bk.clinicId = bt.clinicId");

这可能不是确切的解决方案,但应该可以帮助您了解总体思路

【讨论】:

    【解决方案2】:

    这是我的解决方案。

    const subQuery = `SELECT * FROM bookings bk WHERE bt."startTime" < bk."endTime"`;
    queryBuilder.leftJoin((qb) => {
        qb.getQuery = () => `LATERAL (${subQuery})`;
        qb.setParameters({});
        return qb;
      },
      `bk`,
      `bk."clinicId" = bt."clinicId"`
    )
    

    【讨论】:

      猜你喜欢
      • 2021-01-20
      • 2020-08-13
      • 2020-03-30
      • 2021-08-26
      • 2015-02-18
      • 1970-01-01
      • 1970-01-01
      • 2011-06-24
      相关资源
      最近更新 更多