用Typeorm QueryBuilder代表Mysql原始查询

时间:2020-02-11 02:12:13

标签: mysql typeorm

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

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;

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

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 :(得分:0)

您可能已经解决了此问题,但对其他希望将MySQL SET类型与typeorm一起使用的人有利-

这是typeORM实体中的列:
我们最初根据typeorm文档使用了一个枚举,该枚举确实有效,但对于我们的要求不是必需的。因此,我们选择跳过枚举,仅使用string []。

@Column({ type: 'set' })

gradeLevels: string[];

使用TypeORM存储库查找:

gradeLevels: Raw(col => `FIND_IN_SET('${gradeLevel}', ${col}) > 0`)

使用TypeORM queryBuilder:

.andWhere('FIND_IN_SET(:gradeLevel, question.gradeLevels) > 0', { gradeLevel })