鍍金池/ 問答/數(shù)據(jù)庫/ sql多表查詢的問題

sql多表查詢的問題

1,使用select * from a,b這樣,不加任何條件的查詢,結(jié)果是a和b表關(guān)聯(lián)顯示,但是結(jié)果會重復(fù)好多遍
2,使用select * from a join b ,也是不加任何查詢條件,結(jié)果和1一樣的,ab并排顯示但是結(jié)果重復(fù)好多遍
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

這是為什么?多表查詢的順序是什么呢?
我其實想要的結(jié)果是
1 11 1 a
2 22 2 b
3 33 3 c
4 44 4 d
5 55 5 e
null null 6 f

我該怎么做?當(dāng)然了,直接用rightjoin加條件很簡單了。但是不考慮a、b存在匹配條件的話怎么辦?

回答
編輯回答
擱淺

為什么會這樣我親測了一下
假如有兩張表TableATableB,數(shù)據(jù)如下:

  TableA       TableB
    1            6
    2            7
    3            8
    4            9
    5
  1. select * from TableA,TableB TableA表有5條數(shù)據(jù),TableB有4條數(shù)據(jù),查詢出來就會有5X4=20條數(shù)據(jù)

而且查詢出數(shù)據(jù)都是規(guī)律的,類似與數(shù)學(xué)的排列組合,如下:

  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一樣同理

2018年3月26日 23:26
編輯回答
掛念你

使用uniall all 試試

2018年5月18日 03:58
編輯回答
解夏

多表查詢不帶關(guān)聯(lián)條件的嗎?

2017年9月12日 16:45
編輯回答
獨特范

直接 select * from a, b 會對兩個表的行進(jìn)行組合吧。

試試 full join?

2017年11月11日 02:58
編輯回答
青黛色
select
*
from
a
join b on b.no=a.no
2018年7月24日 00:34