比如表A中有字段a,b,c,d,表B中有字段e,f,g,现在想新建一张表C,里面有两个字段,一个取值来自表A中的a,另一个来自表B中的e,该怎么办?(表A和表B没有关联字段)
拿出来的数据感觉都没啥用
SELECT
A.id,
B.id1
FROM
( SELECT id FROM A ) A,
( SELECT id AS id1 FROM B ) B
可以使用交叉连接查询:
SELECT
a,b,c,d,e,f,g
FROM
A
CROSS JOIN B;
不过这个有个问题是如果你两张表里面数据都多的话数据会以几何式暴涨
前期表设计的问题,无论怎样都要有关联关系,否则A中的a对应B中的哪个e呢
解决方法之一:
手动创建关联字段后,按某种关联关系一个一个的update这个字段,让它们对应上
先不说有没有关联字段,重点是,你的查询结果想显示什么样的数据?如果两个数据不做任何关联,直接join,那么你查询出来的结果条目数为两张表条目数的乘积,即对于A表中的任意行匹配B表中的所有行。比如下面这样
A表
a | b | c | d |
---|---|---|---|
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
B表
e | f | g |
---|---|---|
1 | 2 | 3 |
5 | 6 | 7 |
查询结果
select a,e from A表,B表
a | e |
---|---|
1 | 1 |
5 | 1 |
1 | 5 |
5 | 5 |
另外一种情况是,按照行号进行匹配,即A表中第一行匹配B表中第一行,A表中第二行匹配B表中第二行,以此类推,这个时候只需要在两个数据中分别加上行号字段即可,用行号做为条件来进行join。但是A表和B表的总行数可能不一致,那么就需要说清楚是仅展示能匹配上的行?还是A表记录为准?还是以B表记录为准?sql如下,根据不同的需要,full可以改成left或者right
select a.a,b.e from
(select row_number()over(order by 1) rn,a from a ) as a
full join
(select row_number()over(order by 1) rn,e from b ) as b
on a.rn=b.rn
如果C表只是要建表结构,不要数据的话,倒是问题不大
create table c as
select a.a,b.e from a ,b where 1=2;
但既然这样的话,为什么不直接指定字段类型和字段名称来建表呢?
如果我没有理解错题意得话,给你一个思路,我看着好像不让直接放答案。就给你一个思路吧
因为没有关联的字段,所以你可以用子表嵌套子表,虽然这种方法比较笨,影响性能,但是就单说这一两张表的话,影响不大
表A中有字段:a,b,c,d,表B中有字段:e,f,g,表C有:A中的a,B中的e
select a.a, a.b, a.c, a.d, b.e, b.f, b.g
from A a, B b, C c
where a.a = c.a and b.e = c.e
就这样就可以了
join的用法很多,这里给你一个关联查的方法
SELECT
d1.a,
d1.b,
d2.c,
d2.d
FROM
data1 d1
LEFT JOIN data2 d2 ON d1.id = d2.id
没有关联字段就是驴唇和马嘴的问题嘛。你有5头驴和10匹马,那就是每头驴都对应一次那10匹马...结合完就是50个驴唇马嘴~~
两个数组,,指针指向,或者是数组名代表首地址直接放入表c中