Получить те сущности, у которых дочерняя связь имеет все перечисленные значения? (TypeOrm, SQL)

Как получить те сущности, у которых дочерняя связь имеет все перечисленные значения?

В данные момент возвращаются те, у которых дочерняя связь имеют любое из перечисленных значений.

  const qb = this.postRepository.createQueryBuilder('p');
  qb.leftJoin('p.tags', 'tags');

Такие поиски ищут одно любое совпадение:

1:

  qb.where(`tags.content ILIKE ANY(ARRAY[:...tags])`, {tags: tags});

2:

  qb.where(`tags.content IN (:...tags)`, {tags: tags});

ALL вместо ANY тоже не дает результат.

Типизация сущностей такая:

Post:

  @Entity()
  export class Post {
    @PrimaryGeneratedColumn()
    id: number;

    @OneToMany(() => Tag, (tags) => tags.post)
    @JoinColumn({ name: 'tags_id' })
    tags: Tag[];
  }

Tag:

  @Entity()
  export class Tag {
    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    content: string;

    @ManyToOne(() => Post, (post) => post.tags, {
      orphanedRowAction: 'delete',
    })
    post: Relation<Post>;
  }

Ответы (1 шт):

Автор решения: En Kratia

@Akina дал ответ для sql в комментарии.

Typeorm версия ответа выглядит так:

qb.where(`tags.content IN (:...tags)`, { tags: ['tag1', 'tag2'] });
qb.having(`COUNT(DISTINCT tags.content) = :length`, { length: 2 });
qb.groupBy('p.id, tags.id');
→ Ссылка