Sql “忽略”;多次为“指定”列;CTE

Sql “忽略”;多次为“指定”列;CTE,sql,sql-server,common-table-expression,Sql,Sql Server,Common Table Expression,使用以下CTE: WITH cteRoute AS ( SELECT * FROM CRROUTE cr JOIN crewleg cl on (cr.CDATE = cl.CDATE AND cr.CROUTE = cl.croute) left JOIN legmain lm on (lm.DAY = cl.DAY AND lm.DEP = cl.DEP and lm.CARRIER = cl.CARRIER and lm.FLT = cl.FL

使用以下CTE:

WITH cteRoute AS (
    SELECT *
      FROM CRROUTE cr 
      JOIN crewleg cl on (cr.CDATE = cl.CDATE AND cr.CROUTE = cl.croute)
      left JOIN legmain lm on (lm.DAY = cl.DAY AND lm.DEP = cl.DEP and lm.CARRIER = cl.CARRIER and lm.FLT = cl.FLT and lm.LEGCD = cl.LEGCD )
      left JOIN legtimes lt on (lt.DAY = lm.DAY AND lt.DEP = lm.DEP and lt.CARRIER = lm.CARRIER and lt.FLT = lm.FLT and lt.LEGCD = lm.LEGCD )
      where cr.cdate = 14000
      and cr.croute = 138266498116
)
我收到一个错误,说在CTE中多次选择了承运人

是的,这是正确的。由于
SELECT*
的原因,它确实被选中了多次

我的问题是不是如何解决这个问题。我知道如何通过专门枚举查询中的特定列来解决这个问题,而不是通过
SELECT*

问题是,我使用的数据库来自第三方供应商(在希腊),我无法控制,他们在数据库设计和规范化方面非常,嗯,“草率”

这个查询将返回几百列。我真的不想特别列举它们

SQL Server查询引擎能够提取多个同名列:

SELECT 'this' as LABEL, 'that' as LABEL
将很好地工作,返回两个列,都名为“LABEL”

我的问题是,有没有办法告诉查询引擎忽略公共表表达式中重复的列名?

它可以在普通查询中这样做(如上所示),但在CTE中似乎无法这样做

所讨论的列是联接链接中使用的列,它们将始终相等

更新
这个问题类似于其他问题,但有一个独特的细微差别,使它不是一个重复。如果这一个实际上是重复的,那么无论如何,一定要把它标记为重复的,我会很高兴的,尤其是如果它有答案的话。

这里有一种方法可以减少手工输入的内容

运行以下代码

  SELECT 
    CASE 
      WHEN t.name = 'crewleg' THEN 'cl.' + c.name + ','
      WHEN t.name = 'legmain' THEN 'lm.' + c.name + ','
      WHEN t.name = 'legtimes' THEN 'lt.' + c.name + ','
    END
  FROM sys.tables t
  join sys.columns c on c.object_id = t.object_id
  WHERE t.name in ('crewleg', 'legmain', 'legtimes')

这将返回以
别名
开头的每一列,并在列名后面加一个逗号。把这个复制到记事本上。此时,您只需查找将导致问题的列,并给它们一个别名,这样它们就不会重复。您还可以使用记事本++查找并替换所有回车符,这样select在垂直方向上不会太长。别忘了删除最后一个逗号,因为它是多余的。然后将其复制并粘贴回您的select中。

如果我的问题根本不可能实现,如果我被迫显式命名查询中的每一列,我将非常感谢您提供建议,告诉我如何减少“手指疲劳”。首先,我们对您使用的引擎一无所知。标准SQL不允许重复的列名。@drum-我特别提到我的服务器是SQL server。