我正在使用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
但是似乎要执行很多查询。
答案 0 :(得分:0)
您应该能够与此同时选择多个ID。
SELECT name
FROM areas
where ID in (5263, 5625, 5628, 5621)
答案 1 :(得分:0)
是的,您可以指定多个car.id
并提取car.name
和area.name
并将它们一起返回。
您还可以使用car.id
按ORDER 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)