Hirdetés

Új hozzászólás Aktív témák

  • Louro

    őstag

    Sziasztok!

    Bár ritkán adom fel, de ez most kifogott rajtam és a Google se segített.

    Alap: SQL Server
    Minta:

    CREATE TABLE t1 AS (
      id int,
      name varchar,
      dependency int
    );

    INSERT INTO t1 VALUES (1,'n1',0);
    INSERT INTO t1 VALUES (2,'n2',1);
    INSERT INTO t1 VALUES (3,'n3',1);
    INSERT INTO t1 VALUES (4,'n4',2);
    INSERT INTO t1 VALUES (5,'n5',3);
    INSERT INTO t1 VALUES (6,'n6',3);

    SELECT DISTINCT ca.id
    FROM t1 
    LEFT JOIN t1 AS t2 ON t2.ID = t1.dependency
    LEFT JOIN t1 AS t3 ON t3.ID = t2.dependency
    CROSS APPLY (
      SELECT t1.ID UNION ALL
      SELECT t2.ID UNION ALL
      SELECT t3.ID ) AS c (id);

    A nagy kérdés, hogy én komfortosabb vagyok a JOIN-okkal, mint az APPLY-okkal. Ezt bevallom értelmezni se tudom. Az megvan, hogy egy hierarchiát épít, de a CROSS APPLY esetén a (id) kicsit fura, mert melyik ID-val köti össze a CROSS APPLY-ban lévő ID-t? Vagy duplikálna? A kód szerzője ismeretlen :(

    Valami ilyesmi lenne?

    SELECT DISTINCT ca.id
    FROM t1 
    LEFT JOIN t1 AS t2 ON t2.ID = t1.dependency
    LEFT JOIN t1 AS t3 ON t3.ID = t2.dependency
    LEFT JOIN (
      SELECT t1.ID UNION ALL
      SELECT t2.ID UNION ALL
      SELECT t3.ID ) AS c ON t1.ID = c.ID OR t2.ID = c.ID OR t3.ID;

Új hozzászólás Aktív témák