一些背景:数据库是甲骨文。我正在尝试为表格的每一行创建一个分隔字符串。分隔字符串需要包含项目的两个类别(如果可用,则始终至少有一个类别)。有 3 个表,ITEM、ITEM_CAT 和 ITEM_ITEM_CAT。ITEM 表包含所有项目。ITEM_CAT 表包含所有可能的项目类别。ITEM_ITEM_CAT 包含项目 ID 和类别 ID 之间的所有映射,本质上是一个键值表。
我创建了下面的 SQL,它能够获取特定项目的分隔字符串,但我需要一个可以针对整个表运行的查询。
SELECT 'ITEM'||'%#'|| outerTable.ITEM_ID ||'%#'||
(SELECT midTable.item_cat_nam
FROM
(SELECT innerTable.item_cat_nam AS item_cat_nam, innerTable.item_id AS item_id, ROWNUM AS rn
FROM
(SELECT ic.ITEM_CAT_NAM AS item_cat_nam, i.ITEM_ID AS item_id
FROM ITEM_CAT ic, ITEM_ITEM_CAT iic, ITEM i
WHERE i.ITEM_ID = iic.ITEM_ID
AND iic.ITEM_CAT_CD = ic.ITEM_CAT_CD
AND 287484 = i.item_id
) innerTable
) midTable
WHERE rn = 1
) ||'%#'||
(SELECT midTable.item_cat_nam
FROM
(SELECT innerTable.item_cat_nam AS item_cat_nam, innerTable.item_id AS item_id, ROWNUM AS rn
FROM
(SELECT ic.ITEM_CAT_NAM AS item_cat_nam, i.ITEM_ID AS item_id
FROM ITEM_CAT ic, ITEM_ITEM_CAT iic, ITEM i
WHERE i.ITEM_ID = iic.ITEM_ID
AND iic.ITEM_CAT_CD = ic.ITEM_CAT_CD
AND 287484 = i.item_id
) innerTable
) midTable
WHERE rn = 2
)
FROM OFR outerTable
WHERE outerTable.ITEM_ID = 287484;
我需要能够将外部表的 ITEM_ID 向下传递到最后一个内部连接。当我只需要类别时(通过下面的 SQL 语句,只需要一个内连接),但引入多个类别时,我可以这样做;我需要 rownum (以获得多个类别),然后需要更多的内部连接,我似乎无法将 ITEM_ID 向下传递超过一个内部连接,这就是问题所在......
SELECT 'ITEM'||'%#'|| outerTable.OFR_ID ||'%#'||
(SELECT ic.ITEM_CAT_NAM
FROM ITEM_CAT ic, ITEM_ITEM_CAT iic, ITEM i
WHERE i.ITEM_ID = iic.ITEM_ID
AND iic.ITEM_CAT_CD = ic.ITEM_CAT_CD
AND outerTable.OFR_ID = i.item_id
AND rownum = 1
) innerTable
FROM OFR outerTable;
有人能帮忙吗?
预先感谢您的任何帮助。