【发布时间】:2013-09-17 13:51:13
【问题描述】:
这更像是一个好奇而不是实际应用的问题。假设您有一个包含多个连接的语句,例如:
SELECT
a.name,
b.salary,
c.x
FROM
[table1] a
INNER JOIN [table2] b
ON a.key = b.key
INNER JOIN [table3] c
ON b.key = c.key
现在,假设您要对架构不熟悉的其他表进行多次连接,但您知道:
- 进行连接的键
- 这些表中有 几个 有一个名为“x”的列。
是否可以从包含它的所有表中选择“x”,而无需显式引用表别名。所以它会得到类似的结果(如果可能的话)
SELECT
a.name,
b.salary,
*.x
...
【问题讨论】:
-
像数据库开发人员一样思考。假设我们允许,包括所有表格。然后我们返回 5 列,都称为 x,你怎么知道哪个是哪个?
-
我试图找出是否可以在多个连接表中选择多个具有相同名称的列,而无需在 select 语句中显式地为表名(或别名)添加前缀。 @Penguat 我认为这是不好的做法,但对它的可能性感到好奇。
-
您可以从
sys.columns中提取所有表/列,然后相应地构建您的sql。 -
@penguat - 但无论如何这是可能的。你可以做
SELECT a.x, b.x, c.x。 SQL Server 不强制列名在外部select上必须是唯一的 -
@penguat - 这也是允许的。
SELECT * FROM (SELECT 1) A(X) JOIN (SELECT 1) B(X) ON A.X = B.X。即,如果您在多个列被称为X的连接上使用*,您会遇到同样的问题,但这是不允许的。
标签: sql sql-server tsql