在两个不同的表中创建具有相同列的视图 SQL

Posted

技术标签:

【中文标题】在两个不同的表中创建具有相同列的视图 SQL【英文标题】:Create view SQL with same columns in two different tables 【发布时间】:2021-09-06 12:22:08 【问题描述】:

我有两个具有公共列的表,我需要创建一个包含两个表的所有属性的视图,但是在尝试这样做时

CREATE VIEW prova AS (
    SELECT * 
    FROM sample s, statistics stat 
    WHERE s.sample_ID = stat.sample_ID

CREATE VIEW allData AS (
    SELECT * 
    FROM Sample s 
        INNER JOIN statistics stat vs ON s.sample_ID = stat.sample_ID)

给出错误,因为列 sample_ID 重复了两次。 如何在不一一指定所有属性的情况下创建视图?

谢谢

【问题讨论】:

【参考方案1】:

首先,从不FROM 子句中使用逗号。 始终使用正确、明确、标准、可读的JOIN语法。

其次,明确定义视图的所有列通常是最佳实践。这可以防止以后出现问题。

但是,这不是你的问题。如果唯一重复的列是JOIN 键,则可以使用USING

CREATE VIEW prova AS
    SELECT *
    FROM sample s JOIN
         statistics stat 
         USING (sample_ID);

如果还有其他重复的列,您仍然会遇到问题。一种方便的方法是从一个表中获取所有列并列出其他列:

CREATE VIEW prova AS
    SELECT s.*, stat.col1, stat.col2, . . .
    FROM sample s JOIN
         statistics stat 
         USING (sample_ID);

【讨论】:

以上是关于在两个不同的表中创建具有相同列的视图 SQL的主要内容,如果未能解决你的问题,请参考以下文章

修改列表视图查询集以汇总包含具有相同值的列的表

在 hive 中创建带有附加列的表

在 Redshift 中创建视图时选择列的名称

在列名中使用别名创建表视图

如何根据不同服务器中不同数据库中存在的表在服务器中的数据库中创建视图?

SQL Server 索引视图