Det finns ett antal sätt att göra detta, beroende på vad du verkligen vilja. Utan gemensamma kolumner måste du bestämma om du vill introducera en gemensam kolumn eller skaffa produkten.
Låt oss säga att du har de två tabellerna:
parts: custs:
+----+----------+ +-----+------+
| id | desc | | id | name |
+----+----------+ +-----+------+
| 1 | Sprocket | | 100 | Bob |
| 2 | Flange | | 101 | Paul |
+----+----------+ +-----+------+
Glöm de faktiska kolumnerna eftersom du sannolikt skulle ha ett kund-/order-/delförhållande i detta fall; Jag har precis använt dessa kolumner för att illustrera sätten att göra det.
En kartesisk produkt matchar varje rad i den första tabellen med varje rad i den andra:
> select * from parts, custs;
id desc id name
-- ---- --- ----
1 Sprocket 101 Bob
1 Sprocket 102 Paul
2 Flange 101 Bob
2 Flange 102 Paul
Det är förmodligen inte vad du vill eftersom 1000 delar och 100 kunder skulle resultera i 100 000 rader med massor av duplicerad information.
Alternativt kan du använda en fackförening för att bara mata ut data, men inte sida vid sida (du måste se till att kolumntyperna är kompatibla mellan de två valen, antingen genom att göra tabellkolumnerna kompatibla eller tvinga dem i valet ):
> 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
I vissa databaser kan du använda en rad/radnummer-kolumn eller pseudo-kolumn för att matcha poster sida vid sida, till exempel:
id desc id name
-- ---- --- ----
1 Sprocket 101 Bob
2 Flange 101 Bob
Koden skulle vara något i stil med:
select a.id, a.desc, b.id, b.name
from parts a, custs b
where a.rownum = b.rownum;
Det är fortfarande likt en kartesisk produkt men where
klausul begränsar hur raderna kombineras för att bilda resultaten (så inte en kartesisk produkt alls, egentligen).
Jag har inte testat den SQL för detta eftersom det är en av begränsningarna i mitt DBMS-val, och med rätta tror jag inte att det någonsin behövs i ett väl genomtänkt schema. Eftersom SQL inte garanterar i vilken ordning den producerar data, kan matchningen ändras varje gång du gör frågan om du inte har en specifik relation eller order by
klausul.
Jag tror att det idealiska skulle vara att lägga till en kolumn i båda tabellerna som anger vad förhållandet är. Om det inte finns någon verklig relation, har du förmodligen ingen anledning att försöka sätta dem sida vid sida med SQL.
Om du bara vill att de ska visas sida vid sida i en rapport eller på en webbsida (två exempel), är det rätta verktyget för att göra det vad som än genererar din rapport eller webbsida, tillsammans med två oberoende SQL-frågor för att få de två orelaterade tabellerna. Till exempel ett rutnät med två kolumner i BIRT (eller Crystal eller Jasper) var och en med en separat datatabell, eller en HTML-tabell med två kolumner (eller CSS) var och en med en separat datatabell.