如何使用另一个表 typeorm 查询不符合条件的 id

Posted

技术标签:

【中文标题】如何使用另一个表 typeorm 查询不符合条件的 id【英文标题】:How to query id not in condition with another table typeorm 【发布时间】:2021-10-25 11:06:13 【问题描述】:

这里是查询

SELECT * from tableA WHERE tableA.id NOT IN (SELECT tableB.a_id FROM tableB);

相同的查询如何使用 TypeORM 打字稿编写? 下面是代码,我试过了,还是不行

this.createQueryBuilder('tableA')
.where(`tableA.id != :id`,  id )

【问题讨论】:

【参考方案1】:

您可以先从tableB 中选择ID,然后使用您已获得的ID(我假设它们已映射并存储在var ids: string[])来查询tableA

this.createQueryBuilder('tableA')
  .where(`tableA.id <> ALL(:ids)`,  ids )

【讨论】:

不选择那些id leftJoinAndSelect 会起作用吗? 我不确定,但您可以尝试左连接,然后 tableB 中的某些字段为空。【参考方案2】:
const tableBqry = tableBRepository
       .createQueryBuilder('tableB')
       .select("tableb_id");

const tableAqry = tableARepository
       .createQueryBuilder('tableA')
       .where("tableA.id NOT IN (" + tableBqry.getSql() + ")");

const results = await tableAqry.getMany();

此方法可以很好地解决上述问题。

【讨论】:

以上是关于如何使用另一个表 typeorm 查询不符合条件的 id的主要内容,如果未能解决你的问题,请参考以下文章

如何将EXCEL中符合条件的数据利用公式复制到另一个工作表

SQL多表联查总结

TypeORM 无关联关系的mysql多表连接查询

SQL 相同结构的多张表,如何联合查询符合条件的记录数?

TypeORM Apollo 嵌套查询解析器

mysql如何判断符合查询条件的数据有两条