【发布时间】:2018-12-17 13:04:10
【问题描述】:
我想创建一个基于连接三个表的新视图。
表 1 和表 2 具有相同的列名,但其中的数据代表不同的时间范围。第三个表的列在两个表中都是唯一的。
我的查询获取 table1 的所有数据并使用表 1 中的列从表 2 中提取所有匹配的记录。
然后将此组合数据集与日期大于“2017-12-01”的第三个表合并
SELECT *
FROM table1
LEFT JOIN table2
ON table1.lookup_column = table2.lookup_column
LEFT JOIN table3
ON table3.lookup_column = table1.lookup_column
AND table3.date >= '2017-10-01'
当我运行这个查询来创建新视图时
select * into new_table
FROM table1
LEFT JOIN table2
ON table1.lookup_column = table2.lookup_column
LEFT JOIN table3
ON table3.lookup_column = table1.lookup_column
AND table3.date >= '2017-10-01'
我得到了错误:
Column names in each table must be unique. Column name 'abc' in table 'new_table' is specified more than once.
如何避免列名完全相同的两个表之间出现此问题?或者如何指定我想在列名上组合表 1 和表 2?
编辑:
input
table 1 table2 table
col1 col2 col1 col2 col3 col4
abc def ghi jkl mno pqr
Output:
col1 col2 col3 col4
abc def mno pqr
ghi jkl mno pqr
【问题讨论】:
-
错误的哪一部分你不明白?这似乎是一个明确的错误消息。列出您在视图中明确需要的列。
-
@GordonLinoff 如果我从表 1 中选择所有列,并且查询正在查找表 2 中的相同列,那么新视图是否仍会包含表 2 中的数据?还是我必须选择表 2 中的所有列才能显示表 2 中的数据?
-
您只需要列出您想查看的字段,并为其设置别名即可。即:选择table1.field1作为t1f1,table2.fieldN作为t2fN,...
-
三思而后行,你会如何处理这样的观点。您正在选择一个新表格,而不是创建一个视图(您将如何处理这样的表格?)。
-
@CetinBasoz 你还有什么其他建议?我被要求使用该查询创建一个新视图或表。我是新手,所以对所有建议持开放态度。
标签: sql sql-server sql-server-2012