Merge Query with Connect by is leaf / start with

Ich hänge bei dieser Abfrage fest. Ich brauche Hilfe.


-- ORACLE --- 
 
 MERGE INTO test.CUSTOMER UPC
  USING (SELECT CUST_NO,
                CUST_HIGH_PAYOR_NO,
                CUST_PAYOR_POS,
                CUST_PAYOR_SUBS,
                TIMESTAMP,
                LEVEL LVL,
                (SELECT MAX(LEVEL)
                   FROM test.CUSTOMER
                  START WITH CUST_NO = CUST_NO
                 CONNECT BY PRIOR CUST_PAYOR_NO = CUST_NO) MXLVL,
                (SELECT CUST_NO
                   FROM test.CUSTOMER
                  WHERE CONNECT_BY_ISLEAF = 1
                  START WITH CUST_NO = CUST_NO
                 CONNECT BY PRIOR CUST_PAYOR_NO = CUST_NO) HIGHPAYOR
           FROM test.CUSTOMER
          START WITH CUST_NO = CUST_NO
         CONNECT BY PRIOR CUST_PAYOR_NO = CUST_NO) A
  ON (UPC.CUST_NO = A.CUST_NO)
  WHEN MATCHED THEN
    UPDATE
       SET 
             CUST_PAYOR_SUBS = (SELECT COUNT(*) - 1
                                      FROM test.CUSTOMER
                                     START WITH CUST_NO =
                                                UPC.CUST_NO
                                    CONNECT BY PRIOR CUST_NO =
                                                CUST_PAYOR_NO),
           CUST_PAYOR_POS     = A.MXLVL - A.LVL,
           CUST_HIGH_PAYOR_NO = A.HIGHPAYOR,
           TIMESTAMP              = SYSDATE;
		   
		   

----POSTGRESQL:
		   

  UPDATE GCARS.CUSTOMER UPC
	  SET 
	   CUST_CORP_SUBS_717 = (WITH RECURSIVE CTE_CONNECT_BY AS (
SELECT 1 AS LEVEL, S.* FROM GCARS.CUSTOMER S WHERE CUST_NO_717 =
                                                UPC.CUST_NO_717
UNION ALL
SELECT LEVEL + 1 AS LEVEL, S.* FROM CTE_CONNECT_BY R INNER JOIN GCARS.CUSTOMER S ON  r.CUST_NO_717 =
                                                 s.CUST_PARENT_NO_717
)
SELECT COUNT(*) - 1
          FROM CTE_CONNECT_BY
),
           CUST_CORP_POS_717       = A.MXLVL - A.LVL,
           CUST_HIGH_PARENT_NO_717 = HIGHPARENT,
           TIMESTAMP               = CURRENT_TIMESTAMP:TIMESTAMP(0)
		   
		   FROM
		   
		   (SELECT CUST_NO,
                CUST_HIGH_PAYOR_NO,
                CUST_PAYOR_POS,
                CUST_PAYOR_SUBS,
                TIMESTAMP,
                LEVEL LVL,
				   (WITH RECURSIVE CTE_CONNECT_BY AS (
SELECT 1 AS LEVEL, S.* FROM TEST.CUSTOMER S WHERE CUST_NO_717 = CUST_NO
UNION ALL
SELECT LEVEL + 1 AS LEVEL, S.* FROM CTE_CONNECT_BY R INNER JOIN TEST.CUSTOMER S ON  r.CUST_PARENT_NO = s.CUST_NO
)
SELECT MAX(LEVEL)
                   FROM CTE_CONNECT_BY
) AS MXLVL,

@castorp @pogomips

Entschuldigung für die Markierung. Wenn Sie dabei helfen können, dann wird mich das entlasten.

Die Postgres Version verwendet andere Feldnamen im Update Teil als Oracle.
Was hat das zu bedeuten? Statements vertauscht?
Und wie stellst Du Dir die Beantwortung dieser “Frage” vor? Ist es überhaupt eine Frage?

Niemand kennt das Datenmodell, niemand kennt deine Daten. Du brauchst Hilfe, ja, das brauchen alle hier. Wie sieht es z.B. mit Fehlermeldungen aus? Gibt es keine?

Wenn Du Dir mal Foren wie Stackoverflow anschaust, dann wirst Du feststellen, dort liefert man ein durchgängiges Stück Code mit einer Fehlermeldung, falschem Ergebnis und gewünschtem, einer konkreten Frage usw.

1 „Gefällt mir“

Dieses Thema wurde automatisch 60 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.