sql多表查询的问题

新手上路,请多包涵

1,使用select * from a,b这样,不加任何条件的查询,结果是a和b表关联显示,但是结果会重复好多遍
2,使用select * from a join b ,也是不加任何查询条件,结果和1一样的,ab并排显示但是结果重复好多遍
select * from a:
1 11
2 22
3 33
4 44
5 55
select * from b:
1 a
2 b
3 c
4 d
5 e
6 f
select * from a,b:
1 11 1 a
2 22 1 a
3 33 1 a
4 44 1 a
5 55 1 a
1 11 2 b
2 22 2 b
3 33 2 b
4 44 2 b
5 55 2 b
1 11 3 c
2 22 3 c
3 33 3 c
4 44 3 c
5 55 3 c
1 11 4 d
2 22 4 d
3 33 4 d
4 44 4 d
5 55 4 d
1 11 5 e
2 22 5 e
3 33 5 e
4 44 5 e
5 55 5 e
1 11 6 f
2 22 6 f
3 33 6 f
4 44 6 f
5 55 6 f

这是为什么?多表查询的顺序是什么呢?
我其实想要的结果是
1 11 1 a
2 22 2 b
3 33 3 c
4 44 4 d
5 55 5 e
null null 6 f

我该怎么做?当然了,直接用rightjoin加条件很简单了。但是不考虑a、b存在匹配条件的话怎么办?

阅读 3.4k
5 个回答

直接 select * from a, b 会对两个表的行进行组合吧。

试试 full join?

多表查询不带关联条件的吗?

新手上路,请多包涵

使用uniall all 试试

新手上路,请多包涵
select
*
from
a
join b on b.no=a.no

为什么会这样我亲测了一下
假如有两张表TableATableB,数据如下:

  TableA       TableB
    1            6
    2            7
    3            8
    4            9
    5
  1. select * from TableA,TableB TableA表有5条数据,TableB有4条数据,查询出来就会有5X4=20条数据

而且查询出数据都是规律的,类似与数学的排列组合,如下:

  TableA   TableB
    1        6
    1        7
    1        8
    1        9
    2        6
    2        7
    2        8
    2        9
    3        6
    3        7
    3        8
    3        9
   ...      ...

以此类推,它会自动把TableA表的字段分别分配给表TableB然后排列出来

2.和1一样同理

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题