【发布时间】:2026-02-05 19:25:02
【问题描述】:
假设:
WITH t12 AS (SELECT * FROM t1 INNER JOIN t2 ON (t1.id = t2.id))
SELECT * FROM t12
这将失败:
The column 'id' was specified multiple times for 't12'.
现在这是一个大型查询,因为 t1 和 t2 有很多 (+200) 列。我不会全部列出来:我明确地想使用*。
通常我会用USING (id) 子句解决这个问题,但SQL Server 似乎不支持。有什么想法吗?
另一种选择是在没有WITH 子句的情况下工作——这工作但会降低代码的可读性。
关于 SO 有很多答案可以让您列出所有字段。在 WITH 子句和纯 SQL 中,这是一个明确的问题。诸如“排除字段”here 和here 以及一个for views 之类的相关问题要求非ANSI SQL 功能。这个问题是针对纯 SQL 的,如果 SQL Server 支持 ANSI SQL-92 语法,则可能(据我所知)。
【问题讨论】:
-
"这是一个明确的问题。" - 你不能
-
@MartinSmith,好的,谢谢。在事情发生变化之前,我不会回答它。
-
是否可以选择动态创建 SQL(直接在 T-SQL 中或在您选择的客户端语言中)?
-
@Heinzi,谢谢,但没有。这是一个明确的 SQL 问题。
-
@DavorJosipovic:好的。然后我认为你别无选择,但我很高兴被证明是错误的。
标签: sql sql-server