2010-11-22 2 views
0

Я массовая проблема, создавая вид в MySql:mySQL вид для двух разных таблиц?

таблицу А в базе данных 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 

Таблица B в базе данных 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 

Запись из таблицы A автоматически передается в таблицу B через триггер, если перед удалением.

Мне нужно представление, которое дает мне все записи из таблицы a и таблицы b, как если бы они все еще находились в одной таблице той же базы данных. Столбцы archive_id и archive_datetime могут игнорироваться в представлении, поскольку они не нужны для этого сценария.

ответ

1

Вы можете использовать UNION:

SELECT * FROM a UNION SELECT * FROM b; 

Вы просто должны заменить * с желаемыми столбцов таблицы.

+0

Это прекрасно сделал трюк! UNION не пришла мне в голову :(Можно ли включить столбец, содержащий имя таблицы, где находится соответствующая запись? – glutorange

+0

Вы можете настроить запрос как 'SELECT *, 'a' AS table_name FROM UNION SELECT *, 'b' AS table_name FROM b; '. Снова просто замените' * 'на другие нужные столбцы таблицы. – Flinsch

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

Возможно, мне что-то не хватает?

Смежные вопросы