首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Typeorm QueryBuilder表示Mysql原始查询

用Typeorm QueryBuilder表示Mysql原始查询
EN

Stack Overflow用户
提问于 2020-02-11 02:12:13
回答 2查看 2.1K关注 0票数 0

我想用typeorm查询生成器表示下面的mysql sql查询:

代码语言:javascript
复制
SELECT
  new_rec.*
FROM (SELECT Replace(Replace(Replace(Json_extract(industries, '$[*].id'), '[', ''), ']', ''), ' ', '') AS ids, 
  recruiter.* 
FROM recruiter.recruiter) new_rec 
WHERE Find_in_set('14', new_rec.ids) > 0 AND Find_in_set('16', new_rec.ids) > 0;

有人能帮我打字吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-14 11:00:37

代码语言:javascript
复制
const subQuery = connection
            .createQueryBuilder()
            .select(`
                REPLACE(
                    REPLACE(
                        REPLACE(
                            JSON_EXTRACT(recruiter.industries, '$[*].id'),
                            '[',
                            ''
                        ),
                        ']',
                        ''
                    ),
                    ' ',
                    ''
                ) AS ids,
                recruiter.*
            `)
            .from('recruiter', 'recruiter');
        const selectQuery = this.connection
            .createQueryBuilder()
            .select('*')
            .from('(' + subQuery.getQuery() + ')', 'recruiter');
        selectQuery.getRawMany();

使用此查询,您将获得与mysql查询相同的结果。

票数 1
EN

Stack Overflow用户

发布于 2020-11-22 05:13:29

您可能解决了这个问题,但是为了让希望使用MySQL集合类型的其他人受益-

以下是typeORM实体中的列:

我们最初使用的是按类型文档进行的枚举,但这并不是我们的需求所需要的。因此,我们选择跳过枚举,只使用string[]。

代码语言:javascript
复制
@Column({ type: 'set' })

gradeLevels: string[];

使用TypeORM回购发现:

代码语言:javascript
复制
gradeLevels: Raw(col => `FIND_IN_SET('${gradeLevel}', ${col}) > 0`)

使用TypeORM queryBuilder:

代码语言:javascript
复制
.andWhere('FIND_IN_SET(:gradeLevel, question.gradeLevels) > 0', { gradeLevel })
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60161046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档