如何使用 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 【问题描述】:

我有四个表:brandscountriespackaging_stylesreviews

要求是: 编写一个函数来查找一组品牌的评论。

注意 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+

如何使用特定于州的代理?

导入特定于版本的 python 模块的最佳方法

为啥在建立与 SQL Server 的连接时会发生与网络相关或特定于实例的错误?

尝试连接到MySQL服务器:建立与SQL Server的连接时发生与网络相关或特定于实例的错误