我想用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;
任何人都可以帮助我吗?
答案 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 })