Megosztás a következőn keresztül:


Öncsatlakozások manuális létrehozása (Visual Database Tools)

A következőkre vonatkozik:SQL Server

Akkor is csatlakoztathat egy táblát önmagához, ha a táblának nincs reflexív kapcsolata az adatbázisban. Öncsatlakozás használatával például megkeresheti az ugyanabban a városban élő szerzőpárokat.

Mint minden illesztésnél, az öncsatlakozáshoz is legalább két táblára van szükség. A különbség az, hogy ahelyett, hogy egy második táblát ad hozzá a lekérdezéshez, ugyanahhoz a táblához egy második példányt kell hozzáadnia. Így összehasonlíthatja a tábla első példányának oszlopát a második példány azonos oszlopával, így összehasonlíthatja egy oszlop értékeit egymással. A Lekérdezés- és nézettervező eszközök (Visual Database Tools) aliast rendel a tábla második példányához.

Ha például öncsatlakozást hoz létre a Berkeley összes szerzőpárjának megkereséséhez, összehasonlítja a city tábla első példányában lévő oszlopot a city második példány oszlopával. Az eredményként kapott lekérdezés a következőképpen nézhet ki:

SELECT authors.au_fname,
       authors.au_lname,
       authors1.au_fname AS Expr2,
       authors1.au_lname AS Expr3
FROM authors
     INNER JOIN authors AS authors1
         ON authors.city = authors1.city
WHERE authors.city = 'Berkeley';

Az öncsatlakozás létrehozása gyakran több csatlakozási feltételt igényel. Annak megértéséhez, hogy miért, fontolja meg az előző lekérdezés eredményét:

Cheryl Carson       Cheryl Carson
Abraham Bennet      Abraham Bennet
Cheryl Carson       Abraham Bennet
Abraham Bennet      Cheryl Carson

Az első sor haszontalan; Azt jelzi, hogy Cheryl Carson ugyanabban a városban él, mint Cheryl Carson. A második sor egyformán haszontalan. Ha meg szeretné szüntetni ezeket a haszontalan adatokat, adjon hozzá egy másik feltételt, amely csak azokat az eredménysorokat őrzi meg, amelyekben a két szerző neve különböző szerzőket ír le. Az eredményként kapott lekérdezés a következőképpen nézhet ki:

SELECT authors.au_fname,
       authors.au_lname,
       authors1.au_fname AS Expr2,
       authors1.au_lname AS Expr3
FROM authors
     INNER JOIN authors AS authors1
         ON authors.city = authors1.city
        AND authors.au_id <> authors1.au_id
WHERE authors.city = 'Berkeley';

Az eredményhalmaz javult.

Cheryl Carson       Abraham Bennet
Abraham Bennet      Cheryl Carson

A két eredménysor azonban redundáns. Az első szerint Carson ugyanabban a városban él, mint Bennet, a második szerint a Bennet ugyanabban a városban él, mint Carson. A redundancia megszüntetéséhez módosíthatja a második illesztés feltételét a "nem egyenlő" értékről a "kisebb" értékre. Az eredményként kapott lekérdezés a következőképpen nézhet ki:

SELECT authors.au_fname,
       authors.au_lname,
       authors1.au_fname AS Expr2,
       authors1.au_lname AS Expr3
FROM authors
     INNER JOIN authors AS authors1
         ON authors.city = authors1.city
        AND authors.au_id < authors1.au_id
WHERE authors.city = 'Berkeley';

Az eredményhalmaz pedig így néz ki:

Cheryl Carson       Abraham Bennet

Önbeillesztés manuális létrehozása

  1. Adja hozzá a Diagram panelhez (Visual Database Tools) azt a táblát vagy táblaértékű objektumot, amellyel dolgozni szeretne.

  2. Adja hozzá ismét ugyanazt a táblát, hogy a Diagram panel kétszer is ugyanazt a táblázatot vagy táblaértékű objektumot jelenhesse meg a Diagram panelen.

    A Lekérdezés- és nézettervező aliast rendel a második példányhoz úgy, hogy szekvenciális számot ad hozzá a tábla nevéhez. Emellett a Lekérdezés- és nézettervező létrehoz egy illesztési vonalat a tábla vagy a táblaértékű objektum két előfordulása között a Diagram panelen.

  3. Kattintson jobb egérgombbal az illesztési vonalra, majd válassza a Tulajdonságok parancsot a helyi menüből.

  4. A Tulajdonságok ablakban válassza a Csatlakozás feltétel és típus lehetőséget, majd a tulajdonságtól jobbra található három pontot (...).

  5. A Csatlakozás párbeszédpanelen szükség szerint módosítsa az összehasonlítási operátort az elsődleges kulcsok között. Előfordulhat például, hogy az operátort a (<) alattira módosítja.

  6. Hozza létre a további illesztési feltételt (például authors.zip = authors1.zip) úgy, hogy a tábla vagy táblaértékű objektum első előfordulásában az elsődleges illesztési oszlop nevét húzza, majd a második előfordulás megfelelő oszlopára csepegteti.

  7. Adja meg a lekérdezés egyéb beállításait, például a kimeneti oszlopokat, a keresési feltételeket és a rendezési sorrendet.