oracle 嵌套选择查询

ofi*_*fir 5 sql database select oracle11g

我在 oracle db 上有这个表:

原表

我可以执行将 PARENT 列更改为与其关联的名称的嵌套选择查询吗?像这样:

想要一张桌子

我试过了:

SELECT PC.ID
,(
  SELECT PC.NAME from PRODUCTS_CATEGORIES PC where PC.PARENT = PC.ID
 )
 ,PC.NAME
  FROM PRODUCTS_CATEGORIES PC 
Run Code Online (Sandbox Code Playgroud)

并收到此错误:

Error Message: ORA-01427: single-row sub query returns more than one row
Run Code Online (Sandbox Code Playgroud)

rs.*_*rs. 5

你可以这样做

SELECT PC.ID,
(
   SELECT DISTINCT PC2.NAME from PRODUCTS_CATEGORIES PC2 
   where PC.PARENT = PC2.ID AND PC2.PARENT = 0
 ),
 PC.NAME
 FROM PRODUCTS_CATEGORIES PC 
Run Code Online (Sandbox Code Playgroud)

或者

 SELECT PC.ID,NVL(PC2.NAME,PC.PARENT) PC2_NAME,PC.NAME
  FROM PRODUCTS_CATEGORIES PC 
  LEFT OUTER JOIN 
  (SELECT DISTINCT ID, NAME 
  from PRODUCTS_CATEGORIES WHERE PARENT = 0) PC2 ON PC.PARENT = PC2.ID
Run Code Online (Sandbox Code Playgroud)

  • `distinct` 不能保证只返回一行。 (2认同)