2012-04-10 14 views
2

Ich habe eine Gruppe von Datenbanken, die eine Tabelle mit gleichen Schema haben. Also, ich mache eine UNION auf dieser Tabelle, um die Datensätze aus allen Datenbanken anzuzeigen, was gut funktioniert.Mysql Union aus mehreren Datenbanktabellen

Aber jetzt muss ich erkennen, welche Zeile zu welcher Datenbank/Tabelle gehört, da ich diesen bestimmten Datensatz ändern muss. Ich fand this Link auf die UNION bekommen, aber bin nicht in der Lage, die Logik zu finden, die Zeile < -> Tabelle Beziehung bestimmt.

Jede Hilfe wird sehr geschätzt.

Antwort

2

try this:

(SELECT *, 'db1' as DB_NAME from db1..table1) 
union 
(SELECT *, 'db2' as DB_NAME from db2..table1) 
union 
(SELECT *, 'db3' as DB_NAME from db3..table1) 
... 
1

Sie könnten nur eine Spalte mit Datenbanknamen in den

(SELECT *,'db1' as db from db1..us_music where `genre` = 'punk') 
UNION 
(SELECT *,'db2' as db from db2..us_music where `genre` = 'punk') 
4

Nicht wirklich sicher, Abfragen hinzufügen Was in Ihrem Fall erlaubt ist, ist mein Vorschlag, ein zusätzliches Feld mit einem taub zu haben er in es:

selext field1, field2, 1 as db from db1.tb 
    UNION 
    selext field1, field2, 2 as db from db2.tb1 
UNION 
    selext field1, field2, 3 as db from db1.tb4 
    UNION 

mit diesem Feld können Sie die Quelle jedes Datensatzes identifizieren.

+0

macht Sinn. Danke vielmals. –

+0

Ich tippe auf meinem Handy. Als ich fertig war, schlug ein anderes Plakat dagegen. Ich bin froh, dass Sie die richtige Antwort bekommen haben, die Sie gesucht haben. – kasavbere

0

Nehmen wir an, Sie haben eine komplett separate Datenbank, Oracle, SQL Server oder die Daten befinden sich auf einem separaten Server, wo sie nicht direkt UNIONed werden können (dies passiert uns mit einer ERP-Datenbank und eine technische DB (MySQL) für Testergebnisse). Sie können auf einen der DBs die Abfrage tun, halten Sie das Ergebnis im Speicher gesetzt und eine Abfrage wie folgt konstruieren:

SELECT '' AS SN, 'PRD0547016' AS Prdn_ID UNION 
SELECT '' AS SN, 'PRD0547435' AS Prdn_ID UNION 
SELECT sn, pid AS Prdn_ID 
    FROM build left join product on prod_idx=product.idx WHERE sn='23456-1' 
     AND PID not in ('dgh') 
     ORDER BY Prdn_ID; 

In diesem speziellen Fall, ich am Ende mit:

'23456-1', 'pid 2' 
'23456-1', 'pid 3' 
'', 'PRD0547016' 
'', 'PRD0547435' 

Ich hatte wollte SELECT INTO, yada, yada ..., aber Dateien von Server zu Server übertragen, temporäre Tabellen erstellen, usw.; war zu viel Programmierung und ich wette, dass dies die schnellste Lösung ist.