【问题标题】:Why Sub query in leftjoin in typeorm giving me error?为什么在 typeorm 中的 leftjoin 中的子查询给我错误?
【发布时间】:2022-02-13 21:45:04
【问题描述】:

如果我在 leftjoinandselect 的子查询中定义 innerjoin 或 leftjoin,那么它会给出错误 sqlMessage: "Duplicate column name 'id'"。

例如

.leftJoinAndSelect(
            (qb) =>
              qb
                .from(Email, 'email')
                .innerJoin(User, 'user')
                .where('user.account = :account', {
                  accountId: 4,
                }),
            'email',
            '`email`.`id` = 1',
          )

上面会给我错误“重复的列名'id'”

但如果我删除 innerJoin 那么它工作正常并给出预期的结果。

.leftJoinAndSelect(
                (qb) =>
                  qb
                    .from(Email, 'email'),
                'email',
                '`email`.`id` = 1',
              )

知道为什么会出现这个错误。

【问题讨论】:

    标签: javascript mysql sql nestjs typeorm


    【解决方案1】:

    我认为问题在于emailuser 表都有id 列。 你可以试试下面的代码吗?:

    .leftJoinAndSelect(
                (qb) =>
                  qb    
                    .select("user.id", "user_id")
                    .addSelect("email.id", "email_id")
                    // Add whatever you want by .addSelect method
                    .from(Email, 'email')
                    .innerJoin(User, 'user')
                    .where('user.account = :account', {
                      accountId: 4,
                    }),
                'email',
                '`email`.`id` = 1',
              )
    

    【讨论】:

    • 这是可行的,但现在还有一个问题,我们没有使用 getMany 获取 seubquery 选择的数据,而是我们必须使用 getRawMany 并手动映射它。如果我们可以将 getMany 与子查询一起使用,那就太好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    相关资源
    最近更新 更多