我已经为此挣扎了一段时间,但没有成功。
有两个表可能有关系,但不一定。
FIRST
+----+-----------+------------+
| ID | LPR | TIMESTAMP |
+----+-----------+------------+
| 1 | QWE123RTY | 05-05-2020 |
+----+-----------+------------+
| 2 | ZXC789IOP | 05-05-2020 |
+----+-----------+------------+
| 3 | ASD567FGH | 05-05-2020 |
+----+-----------+------------+
SECOND
+----+-----------+------------+----------+
| ID | LPR | TIMESTAMP | OWNER_ID |
+----+-----------+------------+----------+
| 1 | AAA111BBB | 04-05-2020 | 3 |
+----+-----------+------------+----------+
| 2 | QWE123RTY | 02-05-2020 | 1 |
+----+-----------+------------+----------+
| 3 | BBB222CCC | 14-05-2020 | 1 |
+----+-----------+------------+----------+
我基本上想在棱镜中复制SELECT * FROM FIRST JOIN SECOND WHERE LPR="QWE123RTY"
,但无济于事。我不能使用外键(至少据我所知),因为SECOND中的外键可能并不总是出现在FIRST中,反之亦然。
我认为可能工作的另一种选择是运行两个单独的查询,我在SECOND中检索匹配的记录,然后运行
prisma.FIRST.findMany({
where: {
LPR: { in: ['QWE123RTY', 'BBB222CCC'] }
}
})
真的有人做过这样的事吗?
我已经找到了一个解决我的问题,通过使用prisma.$queryRaw
,我实际上不知道它存在的几个月,我一直在使用它,只是偶然发现它现在。这里是文档链接供参考:Prisma - Raw数据库访问
最终解决方案为:
await prisma.$queryRaw`SELECT * FROM FIRST JOIN SECOND ON FIRST.LPR=SECOND.LPR`
注:我通过使用queryRaw
方法而不是常规Prisma客户端遇到的唯一问题是BLOB类型值被检索为字符串,而不是作为缓冲区,但这可以在前端以及后端相应地处理,对响应进行轻微修改。