查询具有复杂关系的多个表[英] Querying multiple tables with complex relationships

本文是小编为大家收集整理的关于查询具有复杂关系的多个表的处理方法,想解了查询具有复杂关系的多个表的问题怎么解决?查询具有复杂关系的多个表问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我想要的查询超出了我的 SQL 知识范围,所以我希望在这里得到一些帮助.我想在 postgreSQL 9.2 中将多个表的关系合二为一.我知道过程,但我不知道 SQL.

有 4 个表将进入此查询:

  • wishlist:与一个或多个列表相关联并且有首选商店
  • list_wishlist:保存列表和愿望清单之间的关系
  • item: 与列表相关联并且有首选商店
  • prefered_stores:这保存了商店和首选商店之间的关系(每个首选商店在首选商店.因此,如果一个项目或愿望清单有多个首选商店,prefered_store.id 将与这些行相同)

表格如下所示(删除了不相关的列):在此处输入图片描述

生成的表格如下所示:在此处输入图片描述

让我解释一下结果表:

  • item_id:就是这样,物品的id
  • item_stores_comments: 商店/评论与此项目关联的所有prefered_stores 行中的对(商店/评论用逗号分隔,对用分号分隔)
  • wishlist_stores: 关联心愿单的prefered_stored 的商店ID包含此项目所在的列表(以逗号分隔)

我已经用上面示例表的实际结果填充了 item_info 表,所以我想应该很清楚,但如果你没有得到什么,请告诉我.

我按照评论中的建议创建了一个 SQLFiddle:http://sqlfiddle.com/#!12/9fd60它包含与图像中相同的架构和值.

推荐答案

这应该做你想做的:

WITH a AS (
  SELECT item.id, string_agg(prefered_store.store::varchar, ',') wishlist_stores
  FROM item, list_wishlist, wishlist, prefered_store
  WHERE item.list=list_wishlist.list
    AND list_wishlist.wishlist=wishlist.id
    AND wishlist.prefered_stores=prefered_store.id
  GROUP BY item.id
), b AS (
  SELECT item.id, 
    string_agg(
      prefered_store.store::varchar || ',' || prefered_store.comment,
      ' ; ') item_stores_comments
    FROM item, prefered_store
    WHERE item.prefered_stores=prefered_store.id
    GROUP BY item.id
)
SELECT a.id,item_stores_comments,wishlist_stores 
FROM a,b
WHERE a.id=b.id

本文地址:https://www.itbaoku.cn/post/1763988.html