いくつかのコンテキスト: DB は Oracle です。テーブルの行ごとに 1 つの区切り文字列を作成しようとしています。区切られた文字列には、アイテムのカテゴリが 2 つ含まれている必要があります (可能な場合は、少なくとも 1 つのカテゴリが常に存在します)。ITEM、ITEM_CAT、ITEM_ITEM_CAT の 3 つのテーブルがあります。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 ステートメントを介して、必要な内部結合は 1 つだけです) が、複数のカテゴリを導入する必要があります。(複数のカテゴリを取得するために) 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;
誰でもこれを手伝ってもらえますか?
よろしくお願いいたします。