Как получить результат sql только с строками, которые имеют строку связанных отношений

Я пытаюсь запросить базу данных с помощью клиента Prism и хочу вернуть только те строки, которые имеют внешний ключ в объединенной таблице.

Например, получите всех пользователей, которые также создали сообщение. Мне нужно своего рода "ВНУТРЕННЕЕ СОЕДИНЕНИЕ".

Я пробовал что-то вроде:

return this.prisma.user.findMany({
    where: {
        Post: {
            some: {
                id: {
                    not: 0,
                }
            }
        }
    }
});

Но результат не тот. Я не знаю, как использовать "нет, некоторые или все"

1 ответ

Решение

Предположим, у меня есть такая схема:

model User {
  id        Int      @default(autoincrement()) @id
  name      String
  posts     Post[]
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

model Post {
  id        Int      @default(autoincrement()) @id
  title     String
  user      User?    @relation(fields: [userId], references: [id])
  userId    Int?
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

Я получаю пользователей без сообщений по следующему запросу:

  const usersWithoutPosts = await prisma.user.findMany({
    where: {
      posts: {
        none: {
          id: undefined,
        },
      },
    },
  })

Не могли бы вы попробовать этот способ и проверить?

Другие вопросы по тегам