2016-07-30 60 views
1

所有組合我有3個表SQL來產生從4桌

Table1:   Table2:  Table3:  
**Users**  **Posts**  **Articles** 

Name|   Title|  Title| 
Raj    Post1   Article1 
Sujay   Post2   Article2 
Bijay   Post3   Article3 
Jijay   Post4   Article4 

現在我想做的結合他們的所有可能的組合,並把它變成另一個表

就像我希望把它放在表tmp_all_cobinations

Table: **tmp_all_combinations** 

Name 
Raj.Post1.Aticle1 
Raj.Post1.Aticle2 
Raj.Post1.Aticle3 
Raj.Post1.Aticle4 
Raj.Post2.Aticle1 
... 
Raj.Post3.Aticle1 
.... 
Sujay. 

.... 

這樣

+3

嘗試'SELECT * FROM用戶,帖子,articles' – Jens

+0

喜JNS感謝您發表評論你可以請我試試如何將它存儲在選擇 –

+0

@RajarshiDas - 爲什麼把它存儲在第四個表格?您正在複製數據,並且您需要在每次對此表進行更改時重新創建它。它作爲查詢要好得多,或者創建一個運行此查詢的視圖 – spiderman

回答

4

做一個交叉THR之間的連接ee表,在MySQL中可以通過執行INNER JOIN而沒有ON限制來實現。

INSERT INTO tmp_all_combinations (Users, Posts, Articles) 
SELECT t1.Users, t2.Posts, t3.Articles 
FROM Table1 t1 
INNER JOIN Table2 t2 
INNER JOIN Table3 t3 

如果您使用的是Postgres,那麼你就可以CROSS JOIN替代INNER JOIN得到相同的結果。

如果tmp_all_combinations尚不存在,您可以創建它,確保列具有與三個源表相同的類型。

+0

Tim你是老闆 –

+3

@RajarshiDas我很好,但是沒有人比[這個人]更好(http://stackoverflow.com/users/1144035/gordon-linoff)來編寫SQL查詢。 –

0

基本上你需要的是沒有任何列連接的連接,所以它將成爲所有列上的所有列。所以它只是:

select * from users, Posts, articles 
1

的ANSI-SQL的方式來解決這個問題是使用一個cross join

INSERT INTO tmp_all_combinations 
SELECT  table1.name, table2.title, table3.title 
FROM  table1 
CROSS JOIN table2 
CROSS JOIN table3