2010-11-22 18 views
0

Ich habe ein massives Problem Blick in mySQL erstellen:mySQL-Ansicht für zwei verschiedene Tabellen?

Tabelle A in der Datenbank DB1:

CREATE TABLE `a` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'internal ID', 
    `account` VARCHAR(10) NOT NULL DEFAULT '0', 
    `filename` VARCHAR(50) NOT NULL, 
    `filesize` BIGINT(15) NOT NULL DEFAULT '0' 
    PRIMARY KEY (`id`) 
) 
ENGINE=InnoDB 

Tabelle B in der Datenbank DB2:

CREATE TABLE `b` (
     `archive_id` INT(10) UNSIGNED NULL AUTO_INCREMENT, 
     `archive_datetime` DATETIME, 
    `id` INT(10) UNSIGNED NOT NULL, 
    `account` VARCHAR(10) NOT NULL DEFAULT '0', 
    `filename` VARCHAR(50) NOT NULL, 
    `filesize` BIGINT(15) NOT NULL DEFAULT '0' 
    PRIMARY KEY (`archive_id`) 
) 
ENGINE=Archive 

Einträge aus der Tabelle A sind automatisch über Trigger bei BEFORE DELETE in Tabelle B übertragen.

Ich brauche eine Ansicht, die mir alle Einträge aus Tabelle a und Tabelle b gibt, als ob sie noch in einer Tabelle der gleichen Datenbank waren. Die Spalten archive_id und archive_datetime können in der Ansicht ignoriert werden, da sie für dieses Szenario nicht benötigt werden.

Antwort

1

könnten Sie UNION verwenden:

SELECT * FROM a UNION SELECT * FROM b; 

Sie müssen nur * mit den gewünschten Tabellenspalten ersetzen.

+0

Das hat den Trick perfekt gemacht! UNION kam mir nicht in den Sinn :(Gibt es eine Möglichkeit, eine Spalte einzufügen, die den Tabellennamen enthält, aus dem der entsprechende Eintrag stammt? – glutorange

+0

Sie könnten die Abfrage wie 'SELECT *,' AS 'Tabellenname FROM UNION SELECT * anpassen. 'b' AS table_name FROM b; '. Ersetzen Sie einfach' * 'durch andere gewünschte Tabellenspalten. – Flinsch

1
SELECT id, account, filename, filesize FROM a UNION ALL SELECT id, account, filename, filesize FROM b 

Sicher muss ich etwas verpassen?

Verwandte Themen