在SQL Server中从两表选取指定列创建视图的查询语句
创建合并两表指定列的视图解决方案
嘿,这个需求其实挺常见的,但有个核心细节得先理清——两个表之间的关联逻辑,毕竟如果没加关联条件就直接合并,会得到笛卡尔积(简单说就是Table1的每一行都和Table2的每一行强行匹配,这大概率不是你想要的结果)。我给你分几种常见场景来写SQL语句:
场景1:两表存在关联关系(最常用)
如果Table1和Table2有对应的关联字段(比如假设Table1.Column1和Table2.Column4是用来匹配对应行的主键/外键),用JOIN来横向拼接列是最合理的:
CREATE VIEW View1 AS SELECT t1.Column2, t1.Column3, t2.Column6 FROM Table1 t1 INNER JOIN Table2 t2 ON t1.Column1 = t2.Column4; -- 替换成你实际的关联条件
- 这里用的
INNER JOIN只会返回两边都有匹配的行; - 如果需要保留Table1的所有行(哪怕Table2里没对应数据,此时
Column6会显示NULL),把INNER JOIN换成LEFT JOIN; - 如果要保留Table2的所有行,换成
RIGHT JOIN。
场景2:需要纵向堆叠两行数据(较少见)
如果你是想把两个表的行合并到一起(而不是横向拼接列),那得保证列的数量和数据类型兼容,用UNION ALL(或UNION)实现:
CREATE VIEW View1 AS -- 先取Table1的Column2、Column3,Column6用NULL填充 SELECT Column2, Column3, NULL AS Column6 FROM Table1 UNION ALL -- 用UNION会自动去重,UNION ALL保留所有原始行 -- 再取Table2的Column6,Column2、Column3用NULL填充 SELECT NULL AS Column2, NULL AS Column3, Column6 FROM Table2;
场景3:确实需要笛卡尔积(特殊需求)
如果你明确要得到两个表所有行的组合(比如做全量匹配测试),可以用CROSS JOIN:
CREATE VIEW View1 AS SELECT t1.Column2, t1.Column3, t2.Column6 FROM Table1 t1 CROSS JOIN Table2 t2;
内容的提问来源于stack exchange,提问作者Herman Weiss
相关产品推荐
相关产品推荐

