2016-08-05 21 views
0

Ich bin neu in MYSQL und möchte eine Tabelle (Table_Result) nach UNION von 2 gegebenen Tabelle (Table1,2) erstellen. In Tabelle 1, 2 sind einige Werte in der Spalte "MEMORY" gleich, aber die Anzahl der gleichen Speicher kann gleich oder verschieden sein, wie unten zu sehen ist. Ich möchte die neue Tabelle (wie table_result) auf der Basis der "MEMORY" -Spalte erstellen, die das Maximum der Speicherkapazität mit relativen Spalten vorne hat. Die Tabelle mit dem Speicher zählt im Vergleich zu anderen Tabellen weniger, andere Spalten (NAME, CONTENT oder NAME1, CONTENT1) werden mit "NA" gefüllt (siehe Tabelle_Ergebnis).MySQL Tabelle aus UNION von zwei Tabellen erstellen

Eine Idee, wie kann ich das Mysql-Abfrage-Skript schreiben, um das Ergebnis zu erhalten. Ich danke Ihnen für Ihre Hilfe.

BR // RG

TABLE1 
MEMORY  NAME   CONTENT 
MEM 0110H Systemkennung DB01 
MEM 0110H Hauptversion DB03 
MEM 0110H Unterversion DB00 
MEM 0110H Patchlevel  DB04 
MEM 0200H Steuerkanal1 DB01 
MEM 0200H Steuerkanal2 DB01 
MEM 0200H Steuerkanal3 DB01 
MEM 0260H Steuerkanal35 DB01 
MEM 0210H BUE-Gruppe  DB01 
MEM 0210H Licht-Gruppe1 DB01 

TABLE2 
MEMORY  NAME1   CONTENT1 
MEM 0110H System   DB01 
MEM 0110H Hauptversion1 DB02 
MEM 0200H Steuerkanal11 DB01 
MEM 0200H Steuerkanal22 DB06 
MEM 0200H Steuerkanal34 DB05 
MEM 0200H Steuerkanal35 DB04 
MEM 0260H Steuerkanal36 DB02 
MEM 0210H BUE-Gruppe  DB01 

TABLE_RESULT 
MEMORY  NAME   CONTENT  NAME1   CONTENT1 
MEM 0110H Systemkennung DB01  System   DB01 
MEM 0110H Hauptversion DB03  Hauptversion1 DB02 
MEM 0110H Unterversion DB00  NA    NA 
MEM 0110H Patchlevel  DB04  NA    NA 
MEM 0200H Steuerkanal1 DB01  Steuerkanal11 DB01 
MEM 0200H Steuerkanal2 DB01  Steuerkanal22 DB06 
MEM 0200H Steuerkanal3 DB01  Steuerkanal34 DB05 
MEM 0200H NA    NA   Steuerkanal35 DB04 
MEM 0260H Steuerkanal35 DB01  Steuerkanal36 DB02 
MEM 0210H BUE-Gruppe  DB01  BUE-Gruppe  DB01 
MEM 0210H Licht-Gruppe1 DB01  NA    NA 

Antwort

0
SELECT 
    ifnull(a.MEMORY, b.MEMORY) AS MEMORY, 
    ifnull(a.NAME, 'NA') AS NAME, 
    ifnull(a.CONTENT, 'NA') AS CONTENT, 
    ifnull(b.NAME, 'NA') AS NAME1, 
    ifnull(b.CONTENT, 'NA') AS CONTENT1 
FROM TABLE1 AS a 
LEFT JOIN TABLE2 AS b ON a.MEMORY = b.MEMORY 
UNION 
SELECT 
    ifnull(a.MEMORY, b.MEMORY) AS MEMORY, 
    ifnull(a.NAME, 'NA') AS NAME, 
    ifnull(a.CONTENT, 'NA') AS CONTENT, 
    ifnull(b.NAME, 'NA') AS NAME1, 
    ifnull(b.CONTENT, 'NA') AS CONTENT1 
FROM TABLE1 AS a 
RIGHT JOIN TABLE2 AS b ON a.MEMORY = b.MEMORY 
+0

Es tut mir leid für sehr grundlegende Frage zu stellen. Aber was ist "a" und "b" hier? Wie kann diese Abfrage auch eine neue Tabelle erstellen, die das Ergebnis speichert? –

+0

Versuchte den Code, funktioniert nicht. –

0

Die Antwort kommt wie unten heraus:

MEM 0110H, Systemkennung1, DB 01, Systemkennung11, DB 01 
MEM 0110H, Systemkennung2, DB 01, Systemkennung11, DB 01 
MEM 0110H, Systemkennung3, DB 01, Systemkennung11, DB 01 
MEM 0110H, Systemkennung4, DB 01, Systemkennung11, DB 01 
MEM 0110H, Systemkennung1, DB 01, Systemkennung12, DB 01 
MEM 0110H, Systemkennung2, DB 01, Systemkennung12, DB 01 
MEM 0110H, Systemkennung3, DB 01, Systemkennung12, DB 01 
MEM 0110H, Systemkennung4, DB 01, Systemkennung12, DB 01 
MEM 0110H, Systemkennung1, DB 01, Systemkennung13, DB 01 
MEM 0110H, Systemkennung2, DB 01, Systemkennung13, DB 01 
MEM 0110H, Systemkennung3, DB 01, Systemkennung13, DB 01 
MEM 0110H, Systemkennung4, DB 01, Systemkennung13, DB 01 
MEM 0200H, Systemkennung5, DB 01, Systemkennung14, DB 01 
MEM 0200H, Systemkennung6, DB 01, Systemkennung14, DB 01 
MEM 0200H, Systemkennung7, DB 01, Systemkennung14, DB 01 
MEM 0200H, Systemkennung5, DB 01, Systemkennung15, DB 01 
MEM 0200H, Systemkennung6, DB 01, Systemkennung15, DB 01 
MEM 0200H, Systemkennung7, DB 01, Systemkennung15, DB 01 
MEM 0200H, Systemkennung5, DB 01, Systemkennung16, DB 01 
MEM 0200H, Systemkennung6, DB 01, Systemkennung16, DB 01 
MEM 0200H, Systemkennung7, DB 01, Systemkennung16, DB 01 
MEM 0200H, Systemkennung5, DB 01, Systemkennung17, DB 01 
MEM 0200H, Systemkennung6, DB 01, Systemkennung17, DB 01 
MEM 0200H, Systemkennung7, DB 01, Systemkennung17, DB 01 
MEM 0260H, Systemkennung8, DB 01, Systemkennung18, DB 01 
MEM 0210H, Systemkennung9, DB 01, Systemkennung19, DB 01 
MEM 0210H, Systemkennun10, DB 01, Systemkennung19, DB 01 
+0

Willst du bei MEMORY und CONTENT mitmachen? IE, diese 2 Cols müssen gleich sein? – SIDU

+0

Nur die Spalte MEMORY ist die für beide Tabellen, die dieselben Werte haben können. Ich muss nicht nach den anderen Spalten suchen. Es ist wie wenn ich 2 gleiche Werte von MEMORY in Tabelle1 und diese 3 gleichen Werte in Tabelle2 habe, dann hat meine resultierende Tabelle 3 Werte und die Tabelle1 andere Spalten fügen NA NA in der Spalte NAME und INHALTE hinzu. –