如何合并多个动态查询

时间:2019-01-14 20:50:53

标签: javascript sql node.js postgresql

我正在使用bool与我的node数据库进行通信。
我有汽车清单:

postgresql

[{id:1, areaId: 1}, {id:2, areaId: 2}, {id:3, areaId: 2}] 是另一个表中的列(例如areaId),我想获取每辆车的区域名称:

areas

如何建立包含所有带有区域名称的汽车的列表?
天真的方法是为每个对象select name from areas where id = areaId 建立数据库:

query

但是似乎要执行很多查询。

2 个答案:

答案 0 :(得分:0)

您应该能够与此同时选择多个ID。

SELECT name
FROM areas
where ID in (5263, 5625, 5628, 5621) 

答案 1 :(得分:0)

是的,您可以指定多个car.id并提取car.namearea.name并将它们一起返回。

您还可以使用car.idORDER BY对响应进行排序。我不知道有什么方法可以根据传入IDS的顺序来强制执行排序,但是您可以使用JavaScript轻松快速地对结果进行排序。

在SQL中有多种方法可以执行此操作:内部联接,完全联接,子选择...甚至更多。我将演示“内部联接”,因为它通常是最有效的,并且某些SQL查询计划者仍会将子选择转换为内部联接。

您尚未指定,但是假设您使用的是node-postgres ...这是将carIds定义为数组时的答案:

内部加入

const query = `SELECT car.id, car.name, areas.name FROM car INNER JOIN area ON car.areaId WHERE car.id = ANY (${carIds}) ORDER BY car.id`

最后:

return pq.query(query, carIds)