两个不同表的 mySQL 视图?

发布于 2024-10-03 08:27:35 字数 897 浏览 3 评论 0原文

我在 mySQL 中创建视图时遇到了一个大问题:

数据库 DB1 中的表 A:

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

数据库 DB2 中的表 B:

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_idarchive_datetime 列,因为此方案不需要它们。

I've a massive problem creating a view in mySQL:

Table A in database 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

Table B in database 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

Entries from table A are automatically transfered to table B via trigger if BEFORE DELETE.

I need a view that gives me all entries from table a and table b as if they were still in one table of the same database. Columns archive_id and archive_datetime can be ignored in the view as they are not needed for this scenario.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梓梦 2024-10-10 08:27:35

您可以使用UNION

SELECT * FROM a UNION SELECT * FROM b;

您只需将* 替换为所需的表列即可。

You could use UNION:

SELECT * FROM a UNION SELECT * FROM b;

You just have to replace * with the desired table columns.

旧城空念 2024-10-10 08:27:35
SELECT id, account, filename, filesize FROM a UNION ALL SELECT id, account, filename, filesize FROM b

我肯定错过了什么吗?

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

Surely I must be missing something?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文