3

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

有 4 个表将进入此查询:

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

这些表看起来像这样(删除了不相关的列): 在此处输入图像描述

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

让我解释一下结果表:

  • item_id:就是这样,项目的 id
  • item_stores_comments:存储/评论对来自与此项目关联的所有prefered_stores 行(商店/评论用逗号分隔,对用分号分隔)
  • wishlist_stores:存储与该项目所在的列表相关联的心愿单的首选存储 ID(以逗号分隔)

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

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

4

1 回答 1

3

这应该做你想要的:

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
于 2013-01-25T19:35:13.963 回答