Има няколко начина да направите това, в зависимост от това, което наистина искам. При липса на общи колони трябва да решите дали искате да въведете обща колона или да получите продукта.
Да приемем, че имате двете таблици:
parts: custs:
+----+----------+ +-----+------+
| id | desc | | id | name |
+----+----------+ +-----+------+
| 1 | Sprocket | | 100 | Bob |
| 2 | Flange | | 101 | Paul |
+----+----------+ +-----+------+
Забравете действителните колони, тъй като най-вероятно ще имате връзка клиент/поръчка/част в този случай; Току-що използвах тези колони, за да илюстрирам начините да го направя.
Декартов продукт ще съпостави всеки ред в първата таблица с всеки ред във втората:
> select * from parts, custs;
id desc id name
-- ---- --- ----
1 Sprocket 101 Bob
1 Sprocket 102 Paul
2 Flange 101 Bob
2 Flange 102 Paul
Това вероятно не е това, което искате, тъй като 1000 части и 100 клиенти биха довели до 100 000 реда с много дублирана информация.
Като алтернатива можете да използвате обединение само за извеждане на данните, макар и не един до друг (ще трябва да се уверите, че типовете колони са съвместими между двата избрания, или като направите колоните на таблицата съвместими, или ги принудите в избора ):
> 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
В някои бази данни можете да използвате колона rowid/rownum или псевдоколона, за да съпоставите записи един до друг, като например:
id desc id name
-- ---- --- ----
1 Sprocket 101 Bob
2 Flange 101 Bob
Кодът би бил нещо като:
select a.id, a.desc, b.id, b.name
from parts a, custs b
where a.rownum = b.rownum;
Все още е като декартов продукт, но where
Клаузата ограничава начина, по който редовете се комбинират, за да образуват резултатите (така че всъщност изобщо не е декартов продукт).
Не съм тествал този SQL за това, тъй като това е едно от ограниченията на моя избор на СУБД и правилно, не вярвам, че някога е бил необходим в правилно обмислена схема. Тъй като SQL не гарантира реда, в който произвежда данни, съвпадението може да се промени всеки път, когато правите заявката, освен ако нямате конкретна връзка или order by
клауза.
Мисля, че идеалното нещо, което трябва да направите, би било да добавите колона към двете таблици, указваща каква е връзката. Ако няма реална връзка, тогава вероятно нямате работа да се опитвате да ги поставите рамо до рамо с SQL.
Ако просто искате да се показват един до друг в отчет или на уеб страница (два примера), правилният инструмент за това е каквото и да генерира вашия отчет или уеб страница, заедно с две независими SQL заявки, за да получите двете несвързани таблици. Например решетка с две колони в BIRT (или Crystal или Jasper), всяка с отделна таблица с данни, или HTML таблица с две колони (или CSS), всяка с отделна таблица с данни.