是否可以在没有外键的情况下使用Prisma进行连接查询?



我已经为此挣扎了一段时间,但没有成功。

有两个表可能有关系,但不一定。

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类型值被检索为字符串,而不是作为缓冲区,但这可以在前端以及后端相应地处理,对响应进行轻微修改。

最新更新