Existuje řada způsobů, jak toho dosáhnout, v závislosti na tom, co skutečně děláte chtít. Bez společných sloupců se musíte rozhodnout, zda chcete zavést společný sloupec nebo získat produkt.
Řekněme, že máte dvě tabulky:
parts: custs:
+----+----------+ +-----+------+
| id | desc | | id | name |
+----+----------+ +-----+------+
| 1 | Sprocket | | 100 | Bob |
| 2 | Flange | | 101 | Paul |
+----+----------+ +-----+------+
Zapomeňte na skutečné sloupce, protože byste je s největší pravděpodobností měli v tomto případě vztah zákazník/objednávka/část; Tyto sloupce jsem právě použil k ilustraci způsobů, jak toho dosáhnout.
Kartézský součin se bude shodovat s každým řádkem v první tabulce s každým řádkem ve druhé:
> select * from parts, custs;
id desc id name
-- ---- --- ----
1 Sprocket 101 Bob
1 Sprocket 102 Paul
2 Flange 101 Bob
2 Flange 102 Paul
To pravděpodobně není to, co chcete, protože 1000 dílů a 100 zákazníků by vedlo ke 100 000 řádkům se spoustou duplicitních informací.
Alternativně můžete použít sjednocení pouze k výstupu dat, i když ne vedle sebe (musíte se ujistit, že typy sloupců jsou kompatibilní mezi dvěma výběry, buď tím, že sloupce tabulky budou kompatibilní, nebo je vynucete ve výběru ):
> select id as pid, desc, null as cid, null as name from parts
union
select null as pid, null as desc, id as cid, name from custs;
pid desc cid name
--- ---- --- ----
101 Bob
102 Paul
1 Sprocket
2 Flange
V některých databázích můžete použít sloupec rowid/rownum nebo pseudosloupec k přiřazování záznamů vedle sebe, například:
id desc id name
-- ---- --- ----
1 Sprocket 101 Bob
2 Flange 101 Bob
Kód by byl něco jako:
select a.id, a.desc, b.id, b.name
from parts a, custs b
where a.rownum = b.rownum;
Je to stále jako kartézský součin, ale where
klauzule omezuje, jak jsou řádky kombinovány, aby vytvořily výsledky (takže vůbec nejde o kartézský součin, opravdu).
Netestoval jsem to SQL, protože je to jedno z omezení mého výběru DBMS, a právem nevěřím, že by to bylo někdy potřeba ve správně promyšleném schématu. Vzhledem k tomu, že SQL nezaručuje pořadí, ve kterém vytváří data, shoda se může změnit pokaždé, když provedete dotaz, pokud nemáte konkrétní vztah nebo order by
doložka.
Myslím, že ideální by bylo přidat do obou tabulek sloupec s uvedením, jaký je vztah. Pokud neexistuje žádný skutečný vztah, pak pravděpodobně nemáte co dělat v tom, abyste je postavili vedle SQL.
Pokud je chcete zobrazit vedle sebe v přehledu nebo na webové stránce (dva příklady), správným nástrojem je to, co vygeneruje vaši sestavu nebo webovou stránku, spolu se dvěma nezávislými SQL dotazy k získání dvou nesouvisejících tabulek. Například dvousloupcová mřížka v BIRT (nebo Crystal nebo Jasper), každá se samostatnou datovou tabulkou, nebo HTML dvousloupcová tabulka (nebo CSS), každá se samostatnou datovou tabulkou.