【问题标题】:How to create view or table from selecting all columns from multi join select statement?如何通过从多连接选择语句中选择所有列来创建视图或表?
【发布时间】:2019-05-15 23:41:10
【问题描述】:

我正在尝试根据此语句创建视图或表(无关紧要):

select ms.*,fev.*,val.*
FROM table1 ms
    LEFT JOIN table2 fev
        ON ms.col1 = fev.col1
    LeFT JOIN table3 val
        ON val.col1 = ms.col1 
        AND val.date >= '2017-12-01'

我正在尝试以这种方式创建表:

select * into newtable

from (
 select ms.*,fev.*,val.*
    FROM table1 ms
        LEFT JOIN table2 fev
            ON ms.col1 = fev.col1
        LeFT JOIN table3 val
            ON val.col1 = ms.col1 
            AND val.date >= '2017-12-01'
) as newtable

为什么总是报错:

The column 'abc' was specified multiple times for 'newtable'.

当我在 select 语句中指定了表别名时?

【问题讨论】:

  • table1、table2、table3 可以分吗?你有这个错误,因为这些表中有多个名为“abc”的列,请为这些列提供不同的名称。
  • 表之间有很多列名是一样的,但是每张表都有上百列,一一列出来会很繁琐。我在想会有一种更有效的方式来使用表名匹配进行连接

标签: sql join view sql-server-2012


【解决方案1】:

您需要命名所有列,而不是使用通配符。

不同表的任何通用名称都必须使用别名以使它们不同,因为新视图/表中的所有列都必须是唯一的。

获取所有列名称的一种快速方法是将列文件夹从对象资源管理器拖到您的脚本中。然后我想用'/n,'替换','。然后,您可以开始为重复的列设置别名。

【讨论】:

  • 什么 table1 和 2 有完全相同的列名,为什么 join 不能完全在列名上做呢?
  • 因为列中可能有不同的数据。例如,表 1 和表 2 可能有一个名为约会日期的列。但表 1 可能有与 MOT 相关的任命,而表 2 有与服务相关的任命。就其本身而言,SQL Server 不知道您可能在列中放入了什么。有像 Clikview 这样的应用程序会根据列名匹配为您构建相关视图,但 SQL Server 在数据库级别工作,因此您必须指定您想要的列,并为它们设置别名以便它们是唯一的。
猜你喜欢
  • 2015-11-07
  • 2013-05-29
  • 2021-01-21
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 2013-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多