Há várias maneiras de fazer isso, dependendo do que você realmente querer. Sem colunas comuns, você precisa decidir se deseja introduzir uma coluna comum ou obter o produto.
Digamos que você tenha as duas tabelas:
parts: custs:
+----+----------+ +-----+------+
| id | desc | | id | name |
+----+----------+ +-----+------+
| 1 | Sprocket | | 100 | Bob |
| 2 | Flange | | 101 | Paul |
+----+----------+ +-----+------+
Esqueça as colunas reais, pois você provavelmente tem uma relação cliente/pedido/peça neste caso; Acabei de usar essas colunas para ilustrar as maneiras de fazer isso.
Um produto cartesiano corresponderá a todas as linhas da primeira tabela com todas as linhas da segunda:
> select * from parts, custs;
id desc id name
-- ---- --- ----
1 Sprocket 101 Bob
1 Sprocket 102 Paul
2 Flange 101 Bob
2 Flange 102 Paul
Isso provavelmente não é o que você deseja, pois 1.000 peças e 100 clientes resultariam em 100.000 linhas com muitas informações duplicadas.
Como alternativa, você pode usar uma união para apenas gerar os dados, embora não lado a lado (você precisará garantir que os tipos de coluna sejam compatíveis entre as duas seleções, tornando as colunas da tabela compatíveis ou coagindo-as no select ):
> 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
Em alguns bancos de dados, você pode usar uma coluna ou pseudocoluna rowid/rownum para corresponder registros lado a lado, como:
id desc id name
-- ---- --- ----
1 Sprocket 101 Bob
2 Flange 101 Bob
O código seria algo como:
select a.id, a.desc, b.id, b.name
from parts a, custs b
where a.rownum = b.rownum;
Ainda é como um produto cartesiano, mas o
where
cláusula limita como as linhas são combinadas para formar os resultados (portanto, não é um produto cartesiano, na verdade). Eu não testei esse SQL para isso, pois é uma das limitações do meu DBMS de escolha e, com razão, não acredito que seja necessário em um esquema adequadamente pensado. Como o SQL não garante a ordem em que produz os dados, a correspondência pode mudar toda vez que você faz a consulta, a menos que tenha um específico relacionamento ou
order by
cláusula. Acho que o ideal seria adicionar uma coluna nas duas tabelas especificando qual é a relação. Se não houver um relacionamento real, então você provavelmente não tem nada a ver com tentar colocá-los lado a lado com o SQL.
Se você quiser apenas que eles sejam exibidos lado a lado em um relatório ou em uma página da web (dois exemplos), a ferramenta certa para fazer isso é aquela que gera seu relatório ou página da web, juntamente com dois independentes Consultas SQL para obter as duas tabelas não relacionadas. Por exemplo, uma grade de duas colunas em BIRT (ou Crystal ou Jasper), cada uma com uma tabela de dados separada, ou uma tabela HTML de duas colunas (ou CSS), cada uma com uma tabela de dados separada.