2016-07-30 35 views
1

Ich habe 3 TabellenSql alle Kombination aus 4-Tabellen erzeugen

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

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

Jetzt möchte ich alle möglichen Kombinationen von ihnen kombinieren tun und es in einen anderen Tisch

Wie ich es setzen möchte ein Tisch 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. 

.... 

auf diese Weise ein Quer Verbindung zwischen dem thr

+3

versuchen 'select * von den Benutzern, Beiträge, articles' – Jens

+0

Hallo Jns Dank für Sie einen Kommentar Können Sie bitte laborieren, wie kann ich es nach Auswahl speichern –

+0

@RajarshiDas - warum es in einer vierten Tabelle speichern? Sie duplizieren die Daten und müssen sie bei jeder Änderung dieser Tabelle neu erstellen. es ist viel besser als Abfrage oder um eine Ansicht zu erstellen, die diese Abfrage ausführt – spiderman

Antwort

4

Sie ee Tabellen, die in MySQL erreicht werden können, indem eine INNER JOIN ohne ON Einschränkung gemacht wird.

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 

Wenn Sie Postgres verwenden, dann können Sie INNER JOIN mit CROSS JOIN ersetzen das gleiche Ergebnis zu erhalten.

Wenn die tmp_all_combinations nicht bereits vorhanden ist, können Sie sie erstellen und sicherstellen, dass die Spalten dieselben Typen wie die drei Quellentabellen aufweisen.

+0

Tim bist du Chef –

+3

@RajarshiDas ich bin OK, aber niemand ist so gut wie [dieser Typ] (http://Stackoverflow.com/users/1144035/gordon-linoff) wenn es kommt zum Schreiben von SQL-Abfragen. –

0

Im Grunde brauchen Sie einen Join ohne Spalten, an dem Sie teilnehmen können, also werden alle Spalten in allen Spalten angezeigt. so ist es einfach:

select * from users, Posts, articles 
1

Die ANSI-SQL Art und Weise zu adressieren dies wäre ein verwenden cross join:

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