所以我有两个表,想象一下:
表1:
+------+
| Name |
+------+
| John |
| Mary |
| Pete |
+------+
表2:
+--------+
| City |
+--------+
| Paris |
| London |
+--------+
我想要第三个表,其中包含这两个表之间的所有情况:
+--------+---------+
| City | Name |
+--------+---------+
| Paris | John |
| Paris | Mary |
| Paris | Peter |
| London | John |
| London | Mary |
| London | Peter |
+--------+---------+
是否可以这样做?我无法使用联接来实现,因为它们之间没有任何关联。
答案 0 :(得分:1)
是的,有可能。请在下面的SQL QUERY中使用。
这是SQL:
create table table3 AS
select table1.Name,table2.City from table1
join table2;
我希望使用上述SQL可以解决您的问题。
答案 1 :(得分:1)
我无法通过联接执行此操作,因为它们之间没有任何关联。
您实际上可以使用join
来做到这一点:
select c.city, n.name
from table2 c join
table1 n
on 1 = 1;
on
子句中的条件几乎可以是任何东西。
但是,笛卡尔积-您想要做的-是理解联接的基础。因此,SQL直接支持它们:
select c.city, n.name
into table3
from table2 c cross join
table1 n;
实际上,将其写为显式join
并不像听起来那样疯狂。如果任何一个表为空,则cross join
不返回任何行。有时,您想在其他表中保留行。外连接解决了这个问题:
select c.city, n.name
into table3
from table2 c full join
table1 n
on 1 = 1;
答案 2 :(得分:0)
如果要创建第三个表,则
使用此:
Select * into Table3 from ( select City, Name from Name cross join City ) as Tab
GO
否则,您可以为它创建一个view
。
Create View NameCity
As
select City, Name from Name cross join City
GO