typeorm for select distinct order by expressions must appear in select list

这个错误通常是因为在使用TypeORM进行查询时,SELECT语句中的DISTINCT关键字与ORDER BY表达式不兼容。

在使用DISTINCT关键字进行查询时,SELECT语句中只能包含要返回的唯一值的列。如果您在SELECT语句中包含了一个不在DISTINCT中的列,并且该列在ORDER BY表达式中出现,那么就会出现这个错误。

要解决这个问题,您需要确保在SELECT语句中只包含DISTINCT关键字和ORDER BY表达式中列的列名。您可以使用TypeORM提供的QueryBuilder或Repository API来构建查询,确保您只选择需要的列。

例如,如果您想查询一个名为“users”的表,并根据名字和年龄排序,可以使用以下代码:

const users = await getRepository(User)
  .createQueryBuilder('user')
  .select('DISTINCT user.name')
  .addSelect('user.age')
  .orderBy('user.name')
  .addOrderBy('user.age')
  .getMany();

这个查询将选择唯一的用户名和年龄列,并根据它们进行排序,而不会出现“typeorm for select distinct order by expressions must appear in select list”的错误。

希望这可以帮助您解决问题。

  •