如何为含相同公共列的两表创建视图 无需逐一指定列名
解决方案
方法1:使用USING关联子句(适配MySQL、PostgreSQL、Oracle 12c+、SQLite等绝大多数主流数据库)
关联查询时通过USING指定同名的关联列,数据库会自动将该公共列仅保留一次,不需要手动枚举其他字段,正确写法如下:
CREATE VIEW allData AS SELECT * FROM Sample s INNER JOIN statistics stat USING(sample_ID);
方法2:使用NATURAL JOIN(仅适用于两表仅有关联列同名的场景)
如果两张表除了sample_ID之外没有其他同名字段,可以直接用自然连接,数据库会自动匹配所有同名列做等值关联,且公共列仅保留一次:
CREATE VIEW allData AS SELECT * FROM Sample s NATURAL INNER JOIN statistics stat;
注意:如果两表还有其他非关联的同名字段,请勿使用该方法,会导致关联逻辑异常,同时自动合并非预期的同名字段。
另外你提交的第二种写法本身存在语法错误:INNER JOIN statistics stat vs部分多写了多余的别名vs,本身也会触发语法报错。
如果你的数据库版本过旧不支持USING语法,没有办法绕过手动指定字段的操作,只能逐一列出需要的属性,给重复的sample_ID加别名区分,或者仅保留其中一张表的sample_ID字段。
内容的提问来源于stack exchange,提问作者Denise Lavezzari
相关产品推荐
相关产品推荐

