Estoy tratando de crear un generador de consultas TypeORM que se conecte a una base de datos postgresql para obtener todos los nombres únicos en la base de datos. Mi consulta se ve así
names = await this._context.manager .getRepository(Names) .createQueryBuilder('names') .select('DISTINCT ON (names.name) names.name') .orderBy('names.name', 'ASC') .getRawMany();
En este momento, esta consulta obtiene todos los nombres en la base de datos, pero distingue entre mayúsculas y minúsculas, por lo que no puede clasificar duplicados como 'Jane Doe' de 'jane doe'. Hasta ahora, he tratado de hacer mayúsculas/minúsculas distintas de esta manera: .select('DISTINCT ON LOWER(names.name) names.name')
pero eso no funciona. También encontré una función .distinctOn() pero tampoco pude hacer que ese caso no sea sensible.
Soy nuevo en typeORM, así que no sé adónde ir desde aquí, ¿alguna idea?
Estoy trabajando en Node.JS hacia una base de datos postgresql si eso marca la diferencia.
El tema de este problema es postgres en lugar de typeORM. Pregunta similar: Eliminar filas duplicadas en Postgres .
En su caso, la sintaxis correcta es:
names = await this._context.manager .getRepository(Names) .createQueryBuilder('names') .select('DISTINCT ON (LOWER(names.name)) names.name') .orderBy('LOWER(names.name)', 'ASC') .getRawMany();
Con Repository, hice la búsqueda que no distingue entre mayúsculas y minúsculas con postgres como base de datos usando el operador ILIKE
de esta manera
const planning_groups: any[] = await this.planningGroupRepository.find({ where: `"tenant_id" ILIKE '${tenantId}'` });
donde Tenant_id es un nombre de columna y tenantId
es una palabra clave para buscar.