如何使用 SQL 使用特定于“pg”模块 Postgres 的“字符串插值”查询多条记录 [重复]
Posted
技术标签:
【中文标题】如何使用 SQL 使用特定于“pg”模块 Postgres 的“字符串插值”查询多条记录 [重复]【英文标题】:How to query for multiple records using SQL using 'String Interpolation' that's specific to the 'pg' module Postgres [duplicate] 【发布时间】:2021-09-15 05:29:15 【问题描述】:我有四个表:brands
、countries
、packaging_styles
、reviews
要求是: 编写一个函数来查找一组品牌的评论。
注意 1:brands 参数是一个字符串数组 - 品牌数组。 注意 2:该函数应返回与给定品牌匹配的评论对象数组。
查询本身在 Postico 应用程序中进行了测试,并且可以正常工作
const getByBrands = async (brands = []) =>
const review = await pool.query('SELECT b.brand "Brand", c.country "country",\
r.id "ID", r.stars "Stars",\
s.packaging_style "Style",\
r.url "URL", r.variety "Variety"\
FROM brands b, countries c, reviews r, packaging_styles s\
WHERE r.brand_id = b.id\
AND b.brand IN ($1, $2, $3)', brands);
return review.rows;
;
getByBrands(['Koka', 'Boss', 'Peyang']);
现在我被困在的是我只能获得三个品牌的记录,而不是我想要的数量
【问题讨论】:
您需要使用ANY
而不是IN
来与数组进行比较。我不知道它在 javascript 中的确切情况,但在 postgres/SQL 中它最终应该看起来像这样:AND b.brand = ANY(['Koka', 'Boss', 'Peyang'])
。理想情况下,您应该能够将数组参数标记为 ANY($1)
并将数组放置在其中,因此它适用于任何大小的数组。
我认为我的问题更多是 js 而不是 sql。
@404。该链接确实有帮助,它解决了这个问题。非常感谢。请看看我是如何做到的并确认。这可能对其他人有用。
【参考方案1】:
这就是我解决问题的方法
const getByBrands = async (brands = []) =>
const review = await pool.query('SELECT b.brand "Brand", c.country "country",\
r.id "ID", r.stars "Stars",\
s.packaging_style "Style",\
r.url "URL", r.variety "Variety"\
FROM brands b, countries c, reviews r, packaging_styles s\
WHERE r.brand_id = b.id\
AND b.brand = ANY ($1::text[])', [brands]);
console.log(review.rows);
return review.rows;
;
getByBrands(['Koka','Boss']);
【讨论】:
以上是关于如何使用 SQL 使用特定于“pg”模块 Postgres 的“字符串插值”查询多条记录 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 dnSpy 重新编译 DLL - 不可知程序集不能具有特定于处理器的模块 System.EnterpriseServices.Wrapper.dll
ORM - 特定于用于 .NET 的 SQL Server 2008+