首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgers查询-返回多到多关系的数据

Postgers查询-返回多到多关系的数据
EN

Stack Overflow用户
提问于 2022-02-20 16:54:43
回答 1查看 23关注 0票数 -1

我有以下表格:storesitemspromotionspromotion_storespromotion_items

  • 每个商店都链接到促销和商品(商店中的商品)。
  • 每个促销活动可以包含几个项目。

我的目标是返回对象的JSON列表,其中包含特定存储的以下数据(通过stores.id):

  1. promotion_items.id (来自promotions)
  2. promotion_items,描述(来自promotions)
  3. promotion_items.discounted_price (来自促销)
  4. 使用promotion_items链接到此促销的项目列表。

这些桌子看起来如下:

代码语言:javascript
复制
stores: id, name
items: id, store_id, price, other metadata..
promotion_stores: store_id,site_id,promotion_id
promotion_items: promotion_id, item_id
promotions: id, discounted_price, description

到目前为止,我所做的--效率很低--使用了3个查询:

  1. 查询所有相关的促销活动。使用:SELECT promotion_id FROM promotion_stores WHERE store_id = ${branch}
  2. 对于每个升级ID,在promotion_items查询所有项(另一个查询)
  3. 对于每个项ID,查询包含3个不同查询的items表(另一个查询),它们彼此解耦。

我的目标是:对DB进行一次查询,效率更高,无需SQL代码,并根据结果构建一个JSON。

我怎么能这么做?

EN

回答 1

Stack Overflow用户

发布于 2022-02-20 17:53:29

您必须在一个查询中将表连接在一起,如下所示:

代码语言:javascript
复制
SELECT to_jsonb(p.*) || to_jsonb(i.*) 
  FROM promotion_stores AS ps
 INNER JOIN promotions AS p
    ON p.id = ps.promotion_id
 INNER JOIN promotion_items AS pi
    ON pi.promotion_id = p.id
 INNER JOIN items AS i
    ON i.id = pi.item_id
   AND i.store_id = ps.store_id
 WHERE ps.store_id = ${branch} ;

请参阅[医]小提琴中的测试结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71196629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档