sql - 如果第一次加入没有返回任何值,那么使用另一个
问题描述
我在 postgres 数据库上使用 TypeORM,我需要与一个具有多个“到达那里的方式”的表进行连接,并且我需要从每个表中去,因为旧数据可能以一种方式连接而新数据在另一种方式。
我有表用户,我需要获取表结果,我可以通过以下方式:
-> Table A ------------
/ \
User -> (other joins) -> Result
\ /
-> Table X -> Table Z -
由于这是一个包含许多其他相关联接的相当长的查询,我认为将整个查询进行两次(一次通过表 A,如果我没有得到结果,一次通过表 X 和 Z)有点效率低下,所以我尝试做的是另一个小子查询只是为了看看我是否可以通过第一条路径(没有所有其他连接)到达结果表,如果可以,那么我将在主查询中添加相同的连接,如果我无法到达第一条路然后我就去第二条路。
// This function receives the main query created with a createQueryBuilder
function getRoute(query) {
const count = await query.clone()
.innerJoin('something.tableA', 'tableA')
.innerJoin('tableA.result', 'result')
.getCount()
if (count > 0) {
query.innerJoin('something.tableA', 'tableA');
query.innerJoin('tableA.result', 'result')
}
else{
query.innerJoin('something.tableX', 'tableX');
query.innerJoin('tableX.tableZ', 'tableZ');
query.innerJoin('tableZ.result', 'result');
}
}
然而,这种情况是对我真正问题的简化(因为涉及更多路径和更多“where”子句),有没有办法改进这个解决方案?也许以某种方式缓存第一个 query.clone() 的结果,所以我不必再次进行该过程?
解决方案
推荐阅读
- c# - 尝试通过 NRECO 转换 pdf 时,HTML 行在两页之间拆分
- sql - ORA-00922: 向表中插入值时选项缺失或无效
- python-3.x - 当背景最小时,如何计算图像中紧密连接的对象(MJ 种子)?
- javascript - 如何使用javascript添加参数
- java - 将 Java 程序保存为可运行格式
- python - 如何将文本格式 12- 更改为 -12 并转换为数字?
- python - 训练数千个相对较小的模型有哪些选择
- confluent-platform - 在 UI 中查看任何主题的消息时,Confluent 控制中心在 1 分钟后抛出错误
- html - 使用 CSS Flexbox 对齐 Div
- swagger-ui - Swagger 不显示响应正文