2010-11-22 6 views
0

J'ai un énorme problème créant une vue en mySQL:vue mySQL pour deux tables différentes?

Tableau A base de données 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 

Tableau B dans la base de données 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 

entrées du tableau A sont automatiquement transféré à la table B via le déclencheur si AVANT DE SUPPRIMER.

J'ai besoin d'une vue qui me donne toutes les entrées des tables a et b comme si elles étaient encore dans une table de la même base de données. Les colonnes archive_id et archive_datetime peuvent être ignorées dans la vue car elles ne sont pas nécessaires pour ce scénario.

Répondre

1

Vous pouvez utiliser UNION:

SELECT * FROM a UNION SELECT * FROM b; 

Il vous suffit de remplacer * les colonnes de table souhaitées.

+0

Cela a parfaitement fait l'affaire! UNION n'est pas venu à l'esprit :(Est-il possible d'inclure une colonne contenant le nom de la table d'où provient l'entrée correspondante? – glutorange

+0

Vous pouvez ajuster la requête comme 'SELECT *,' a 'AS nom_table FROM UNION SELECT *, 'b' AS nom_table FROM b; '. Encore une fois, remplacez simplement' * 'par d'autres colonnes de table désirées. – Flinsch

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

Je dois sûrement rater quelque chose?

Questions connexes