使用 jOOQ 使用 WHERE IN 保留结果顺序

Preserve order of results with WHERE IN with jOOQ

问题已在ORDER BY the IN value list

中详细描述

但要重复:我想 select id 为 1、3、2、4 的项目按特定顺序排列。

我的 jOOQ 片段:

var results = create.select().from(ITEM).where(ITEM.ID.in(1,3,2,4)).fetchInto(Item.class);

生成的 results 列表中的项目将按 1、2、3、4 的顺序排列。 如何使用 jOOQ 保留项目的顺序?

您可以为此使用 Field.sortAsc()

create.select()
      .from(ITEM)
      .where(ITEM.ID.in(1, 3, 2, 4))
      .orderBy(ITEM.ID.sortAsc(1, 3, 2, 4))
      .fetchInto(Item.class);

或者,当然,为了避免重复列表,使用局部变量:

Integer[] ids = { 1, 3, 2, 4 };
create.select()
      .from(ITEM)
      .where(ITEM.ID.in(ids))
      .orderBy(ITEM.ID.sortAsc(ids))
      .fetchInto(Item.class);

See also this article about sort indirection here.