mysql - 为具有重叠 ID 的表创建视图
问题描述
给定两张桌子Cat
和Dog
表Cat
有以下列:id
, name
, weight
, height
,<special columns just for cat>
表Dog
有以下列:id
, name
, weight
, height
,<special columns just for dog>
我们要创建一个Animal
视图:id
, name
, weight
, height
.
数据类型相同。两者都id
从 0 开始。
重叠的简单选项id
:
CREATE OR REPLACE VIEW Animal(id, name, weight, height) as
(SELECT
id,
name,
weight,
height
FROM Cat)
UNION
(SELECT
id,
name,
weight,
height
FROM Dog);
但是我们需要 Animal 表中的某种主键,以及在需要时将它们称为 Cat 或 Dog 的方法。
所以我创建了这个替代方案,它允许我们从id
and中创建一个主键type
。但是 type 是 varchar,所以可能效率不高。有更好的方法吗?
CREATE OR REPLACE VIEW Animal(id, type, name, weight, height) as
(SELECT
id,
"Cat",
name,
weight,
height
FROM Cat)
UNION
(SELECT
id,
"Dog",
name,
weight,
height
FROM Dog);
解决方案
添加指定类型的列。
CREATE OR REPLACE VIEW Animal as
SELECT id, name, weight, height, 'Cat' as type
FROM Cat
UNION ALL
SELECT id, name, weight, height, 'Dog' as type
FROM Dog;
唯一键是type
和的组合id
。
不幸的是,MySQL 不允许FROM
视图子句中的子查询。这使得为每一行添加一个唯一的行号有点复杂(这是可能的)。所以,我建议只使用复合唯一键。
推荐阅读
- python - 我是如何用 colab 读取 .gz 文件的
- perl - Perl 在屏幕或 File3 中从 file1 和 file2 打印匹配和不匹配的字符串
- c# - 从 WindowsAzure.Storage 迁移到 Azure.Storage 包时从 CloudStorageAccount 引用服务
- python - Python CSV 文件:打印与列表相比缺失的元素。打印整列
- android - 跟踪信息视图在谷歌分析仪表板中不可见
- c# - c#如何允许嵌入图像HtmlSanitizer
- java - 在使用反射调用方法之前转换参数
- excel - 对电源查询中除 x 列之外的所有列求和
- asp.net-core - 方法“AddDebug”没有重载需要 1 个参数
- jestjs - 找不到命令'jest',您的意思是:来自 deb coreutils 的命令'test' 尝试:sudo apt install