首页 > 解决方案 > 为具有重叠 ID 的表创建视图

问题描述

给定两张桌子CatDog

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 的方法。

所以我创建了这个替代方案,它允许我们从idand中创建一个主键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);

标签: mysqlsql

解决方案


添加指定类型的列。

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视图子句中的子查询。这使得为​​每一行添加一个唯一的行号有点复杂(这是可能的)。所以,我建议只使用复合唯一键。


推荐阅读