1. Dotazy na sloupce s vícenásobnými odkazy

    Article: AN0001882Updated: 28.06.2021

    Při dotazování dotazování na sloupce s vícenásobnými odkazy je třeba použít tuto syntaxi:

    Máme třídu project, která se odkazuje ve sloupci add-ci na třídu CI. Chceme vypsat id projektu, jméno projektu a krátký popis konfigurační položky CI. V dotazu se musíme odkázat na třídu project:add-ci, která se vytváří automaticky při použití sloupce M:N a její kód je ve tvaru název odkazující se třídy:název odkazované třídy. V této třídě jsou dva sloupce LinkDataRowId a DataRowId. Sloupec DataRowId se váže na odkazující se třídu project, sloupec LinkDataRowId se váže na odkazovanou třídu added-ci.

     

     

    Poznámka: Červeně znázorněné vazby a entita jsou systémové, vytvořené automaticky, ne uživatelem.

    SELECT p.id AS Project_ID, p.name, c.shortdescription AS SD FROM {{: class.project :}} p
    INNER JOIN {{: class.project:added-ci :}} pc ON pc.DataRowId = p.id
    INNER JOIN {{: class.ci :}} c ON c.id = pc.LinkDataRowId

    V určitých případech můžeme preferovat vypsání odkazů oddělených čárkou do prostého textového pole. Toho dosáhneme pomocí klauzule STUFF:

    SELECT p.id, STUFF(
    (SELECT ',** ' + c.shortdescription AS [text()]
    FROM DataRow{{:class.project.id:}}_{{:class.ci.id:}}Link ref
    INNER JOIN {{:class.ci:}} c ON c.id = ref.LinkReferentionId
    WHERE ref.ReferentionId = p.Id AND ref.ColumnClassDefId = {{:class.project.column.added-ci.id:}}
    ORDER BY c.shortdescription
    For XML PATH ('')
    ), 1, 1, ''
    ) added_ci

    FROM {{:class.project:}} p WHERE p.deleted IS NULL

    V případě vícenásobného odkazu na uživatele je třeba použít třídu person, v níž jsou uživatelé ObjectGears. Máme třídu project a v ní sloupec uzivatele, který je násobným odkazem na uživatele. Uživatelé jsou vždy v tabulce person. Na ni se odkazujeme prostým uvedením jejího názvu (nedáváme ho do dvojitých závorek a dvojteček jako názvy uživatelem vytvořených tříd). Systémem generovaná asociační třída project:uzivatele má sloupce DataRowId (nese odkaz třídu project) a sloupec PersonId (nese odkaz na tabulku uživatelů).

     

     

     

    Poznámka: Červeně znázorněné vazby a entita jsou systémové, vytvořené automaticky, ne uživatelem.

    SELECT p.id AS Project_ID, p.code, per.code AS Persons
    FROM {{: class.project :}} p
    INNER JOIN {{: class.project:person :}} pp ON pp.DataRowId = p.id
    INNER JOIN person per ON per.id = pp.PersonId

×