Postgresql

錯誤:子查詢必須只返回一列

  • May 8, 2020

我有兩張桌子,一張是Category,另一張是Product

表說明是

類別

  • name
  • 描述
  • parent_id(自引用鍵)(最多可分為 3 級)

產品

  • name
  • 描述
  • 類型
  • category_id(類別表的外鍵)

我想在單個產品上顯示所有類別以及相關產品。因此,為了獲取相關類別,我使用以下查詢。我可以在自引用表上進行左連接,但我無法獲取產品數據列表,因為這是一個子查詢,而子查詢只會返回一個列。

   select                                                                                                                                                                                                      
              cat1.id, ARRAY(select name, type, description from product where
              product.category_id = cat1.id)
              as category_1_products_data,

              cat2.id, ARRAY(select name, type, description from product where
              product.category_id = cat2.id)
              as category_2_products_data,

              cat3.id, ARRAY(select name, type, description from product where
              product.category_id = cat3.id)
              as category_3_products_data
   from       category cat1
   left join  category cat2
   on         cat2.parent_id = cat1.id
   left join  category cat3
   on         cat3.parent_id = cat2.id
   where      cat1.parent_id is null;

錯誤:子查詢必須只返回一列第 2 行:cat1.id,(從…中選擇名稱、類型、描述

數組的所有元素必須具有相同的類型;當使用子查詢構造數組時,最簡單的方法是要求查詢只返回一列。

但是您可以使用行建構子使子查詢返回類型為複合類型的單個列:

ARRAY(SELECT ROW(name, type, description) FROM ...)

引用自:https://dba.stackexchange.com/questions/266721