按两列排序但只有一个顺序

Order By two columns but have one order

这个问题是 sequelize 特定的,但我想如果我在 SQL 中找到了一种方法,那么我可以在 sequelize

中找到一种方法

我需要通过使用 includemockUser.fullname 连接的 user.fullname 返回请求,这是一个 JSON 字段。

但是要记住的一件重要事情是 user 在存在 mockUser 的情况下可以为空。

这是我目前所拥有的,它是按 mockUser.fullnameuser.fullname 排序的,但是,它是分开排序的,这意味着有两个正确的订单,但它们没有被排序一个订单就是想要的结果。

      const options = {
        where: args,
        include: ['user'],
        limit,
        offset,
        order: [['user', 'fullname', 'ASC'], ['mockUser.fullname', 'ASC']]
      }

SQL 上面 sequelize 表示的等价物,它由 sequelize 吐出但我清理了它

注意:它将每个“用户”.“列”转换为“user.column”

SELECT * FROM "table" 
LEFT OUTER JOIN "user" ON "table"."userId" = "user"."id" 
WHERE "table"."columnId" = '9efcbd5a-4dc7-4102-ad59-b6f6cd9adaa4'
ORDER BY "user"."fullname" ASC, ("table"."mockUser"#>>'{fullname}') ASC 
LIMIT 10 
OFFSET 0;

我正在使用 tablecolumn 来混淆真实姓名

示例输出:

Adam Smith -> user
Beatrice Westfield -> user
John Smith -> user
Andy Brook -> mockUser
Mario Jimenez -> mockUser
Nadia Martinez -> mockUser

期望的输出:

Adam Smith -> user
Andy Brook -> mockUser
Beatrice Westfield -> user
John Smith -> user
Mario Jimenez -> mockUser
Nadia Martinez -> mockUser

如您所见,它首先对用户进行排序,然后对 mockUser 进行排序,但我如何将两者结合起来?

我想你在找

order by coalesce (user, mockUser)

在这种情况下,如果用户为空,它将按模拟用户排序。