Referencia - of - sql (DML), hogyan lehet kombinálni adatok két oszlopban egyetlen nélkül unió csatlakozhatnak, és

Az ilyen kérdések irigylésre méltó rendszeresség jelennek meg az oldalak különböző fórumokon. By the way, számomra ez még mindig rejtély, hogy miért ez kerül át egy további feltétel, hogy nem használja az Unió és / vagy csatlakozz. Csak azt tudom feltételezni, hogy ezek a kérdések arra kérik az interjú során, amikor egy állásra.

Kitérőt. Azt hiszem, hogy erre a kérdésre válaszolni Joe Selco: van egy tervezési hiba, ami abból áll, hogy az egyik tulajdonság két részre. De tegyük félre a tervezés kérdéseivel, és lépni a probléma megoldására.

Hozzon létre egy táblát, és adjunk hozzá egy kis adat:

Tehát, van egy tábla T, amelynek két oszlop adatait ugyanolyan típusú:

Azt szeretné, hogy a következő eredménnyel:

Tudom háromféleképpen végrehajtott szabványos SQL interaktív nyelvi eszközökkel.

1. UNION ALL

2. FULL JOIN

Az adatvesztés elkerülése érdekében ismétlődések vannak különböző oszlopok végez teljes csatlakozás (FULL JOIN) a nyilvánvalóan hamis állítmány, mondjuk, 1 = 2:

Ezután használjuk a COALESCE funkciót. ami megadja nekünk mindent, amit kell:

3. UNPIVOT

Értékei oszlop col1 és col2 gyűjteni egy oszlopban col unpvt segédtáblázatot. Azonban van egy jellemzője a használata PIVOT és UNPIVOT szereplők - nem teszik NULL értékeket. Az eredmény az utolsó lekérdezés:

Ez akadályozza a megoldást mi a probléma kiküszöbölhető azáltal, hogy a NULL értékű a bemeneti üzemeltető UNPIVOT psevdoznacheniem, azaz értéket, ami nyilvánvalóan nem lehet az eredeti adatokat, majd hajtsa végre az inverz transzformáció:

Itt COALESCE (colx, 777) helyettesíti a NULL-értékeket az oszlopban colx 777 és NULLIF funkció (col, 777) hajt végre az inverz transzformációt.

A legutóbbi döntése ad nekünk a kívánt eredményt, de van egy hibája - az értéke 777 lehet előbb-utóbb megjelennek az adatok, hibás eredményekhez vezetnek. Ennek kijavításához hiba, lehetőség van arra, hogy más típusú érték, ami nyilvánvalóan nem lehet jelen egy egész szám oszlopban, például a szimbólum „x”. Természetesen ahhoz, hogy ezt a megközelítést kompatibilitási típus integer típusú oszlopokat kell alakítani a karakter típus, ha szükséges, elvégzi inverz transzformáció a végeredmény:

Néhány szó a hatékonyságát a bemutatott megoldások. A terv szerint a lekérdezés, a nagy költségek miatt az adatok olvasása (scanning műtőasztalon - táblázat scan). Az első két döntést lapolvasás kétszer, míg az utóbbinál (UNPIVOT) - egy időben, és ez annak köszönhető, hogy a kettős teljesítmény előnye.

Van egy másik lehetőség, hogy tudom használni:

A Descartes-szorzat az asztal T minta 2 sor ad egy „megduplázódott” (minden egyes sorban megismételjük 2-szer - a = 1, és a = 2). Az első esetben vesszük értékét col1, és a második - a col2.

Itt, persze, van egy egyesület, és csatlakozhat, de véleményem szerint ez csak az érdekli, szkennelés az asztalra ebben a kérdésben.


Területek létrehozása Tyumen
Hozzon létre egy magas minőségű és alacsony költségű oldalak, site kártya, a vállalati
professor-labs.ru
kiszámítása a konyhában
Konyhák, folyosók, bútorfrontok. Beauty olasz konyha
hanak.ru
fantázia
filme-online-anschauen.com

Gyakorlatok SELECT (értékelés szakaszában)