Można to zrobić na kilka sposobów, w zależności od tego, co naprawdę chcieć. Bez wspólnych kolumn musisz zdecydować, czy chcesz wprowadzić wspólną kolumnę, czy otrzymać produkt.
Załóżmy, że masz dwa stoły:
parts: custs:
+----+----------+ +-----+------+
| id | desc | | id | name |
+----+----------+ +-----+------+
| 1 | Sprocket | | 100 | Bob |
| 2 | Flange | | 101 | Paul |
+----+----------+ +-----+------+
Zapomnij o rzeczywistych kolumnach, ponieważ najprawdopodobniej masz w tym przypadku relacja klient/zamówienie/część; Właśnie użyłem tych kolumn, aby zilustrować sposoby na zrobienie tego.
Produkt kartezjański dopasuje każdy wiersz w pierwszej tabeli do każdego wiersza w drugiej:
> select * from parts, custs;
id desc id name
-- ---- --- ----
1 Sprocket 101 Bob
1 Sprocket 102 Paul
2 Flange 101 Bob
2 Flange 102 Paul
Prawdopodobnie nie tego chcesz, ponieważ 1000 części i 100 klientów dałoby 100 000 wierszy z dużą ilością zduplikowanych informacji.
Alternatywnie możesz użyć unii, aby po prostu wyprowadzić dane, ale nie obok siebie (musisz upewnić się, że typy kolumn są zgodne między dwoma zaznaczeniami, albo przez zapewnienie zgodności kolumn tabeli, albo wymuszenie ich w zaznaczeniu ):
> 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
W niektórych bazach danych można użyć kolumny lub pseudokolumny rowid/rownum, aby dopasować rekordy obok siebie, na przykład:
id desc id name
-- ---- --- ----
1 Sprocket 101 Bob
2 Flange 101 Bob
Kod byłby podobny do:
select a.id, a.desc, b.id, b.name
from parts a, custs b
where a.rownum = b.rownum;
Nadal jest jak produkt kartezjański, ale where
klauzula ogranicza sposób łączenia wierszy w celu utworzenia wyników (więc tak naprawdę nie jest to iloczyn kartezjański).
Nie testowałem tego SQL, ponieważ jest to jedno z ograniczeń mojego wyboru DBMS, i słusznie, nie sądzę, aby był kiedykolwiek potrzebny w odpowiednio przemyślanym schemacie. Ponieważ SQL nie gwarantuje kolejności, w jakiej generuje dane, dopasowanie może zmieniać się za każdym razem, gdy wykonujesz zapytanie, chyba że masz konkretny związek lub order by
klauzula.
Myślę, że idealnym rozwiązaniem byłoby dodanie kolumny do obu tabel, określającej, jaka jest relacja. Jeśli nie ma prawdziwej relacji, prawdopodobnie nie ma sensu łączyć ich z SQL.
Jeśli chcesz, aby były wyświetlane obok siebie w raporcie lub na stronie internetowej (dwa przykłady), właściwym narzędziem do tego jest to, co generuje raport lub stronę internetową, w połączeniu z dwoma niezależnymi Zapytania SQL w celu uzyskania dwóch niepowiązanych tabel. Na przykład dwukolumnowa siatka w BIRT (lub Crystal lub Jasper), każda z osobną tabelą danych, lub dwukolumnowa tabela HTML (lub CSS), każda z osobną tabelą danych.