1

ある列の値が別のレコードで親 ID として使用されている同じテーブルから値を取得する必要があります。これは第 3 レベルで行われます。つまり、1 つのレコードの最初の列の値が 2 番目の列の別のレコードで使用され、2 番目のレコードの最初の列の値がさらに別のレコードの 2 番目の列で使用されます。この第 3 レベルのネスティングでは、次のクエリを使用しました。

SELECT C1.CALLCATEGORYDESCR AS "First", 
       C2.CALLCATEGORYDESCR AS "Second",
       C3.CALLCATEGORYDESCR AS "Third" 
FROM CALLCAT C1
JOIN CALLCAT C2
ON C1.CALLCATEGORY = C2.parent_id
JOIN CALLCAT C3
ON C2.CALLCATEGORY = C3.PARENT_ID
WHERE C3.ACTIVE = 1

ここで、CALLCATEGORY は最初の列で、PARENT_ID は 2 番目の列です。

このクエリは正常に機能し、第 3 レベルのネストの結果が得られます。ただし、第 2 レベルでのみネストされているレコードと、ネストされていないレコードも検索する必要があります (それらの callcategory 値は parent_id として使用されません)。基本的に、2 番目のレベルのネスティングと、3 番目の出力列に NULL 値を持つネスティングなし、ネスティングがない場合は 2 番目と 3 番目の列に NULL を持つクエリを追加する必要があります。

4

2 に答える 2

0

あなたはそれを行うことができますUnion

SELECT C1.CALLCATEGORYDESCR AS "First", 
       C2.CALLCATEGORYDESCR AS "Second",
       C3.CALLCATEGORYDESCR AS "Third" 
FROM CALLCAT C1
JOIN CALLCAT C2
ON C1.CALLCATEGORY = C2.parent_id
JOIN CALLCAT C3
ON C2.CALLCATEGORY = C3.PARENT_ID
WHERE C3.ACTIVE = 1

UNION

SELECT C1.CALLCATEGORYDESCR AS "First", 
       C2.CALLCATEGORYDESCR AS "Second",
       null AS "Third" 
FROM CALLCAT C1
JOIN CALLCAT C2
ON C1.CALLCATEGORY = C2.parent_id
WHERE C2.ACTIVE = 1 and not exists 
(select 1 from callcat where parent_id = C2.CALLCATEGORY)

UNION

SELECT C1.CALLCATEGORYDESCR AS "First", 
       null AS "Second",
       null AS "Third" 
FROM CALLCAT C1
WHERE C1.ACTIVE = 1 and not exists 
(select 1 from callcat where parent_id = C1.CALLCATEGORY)
于 2013-02-06T11:08:40.877 に答える
0

左結合を試す

SELECT C1.CALLCATEGORYDESCR AS "First", 
   C2.CALLCATEGORYDESCR AS "Second",
   C3.CALLCATEGORYDESCR AS "Third" 
FROM CALLCAT C1
LEFT JOIN CALLCAT C2
ON C1.CALLCATEGORY = C2.parent_id
LEFT JOIN CALLCAT C3
ON C2.CALLCATEGORY = C3.PARENT_ID
WHERE C3.ACTIVE = 1
于 2013-02-06T11:11:56.837 に答える