0

在 SQL 中,我将一个表加入到自身中:

SELECT * FROM table AS a
LEFT JOIN table AS b
ON a.NAME = b.NAME

所以它正在获取NAME在另一个表的一行中出现的所有行(也将返回同一行两次!)。

假设我想将结果保存到一个临时表中,比如:

SELECT * INTO ##temp_table FROM (
    SELECT * FROM table AS a
    LEFT JOIN table AS b
    ON a.NAME = b.NAME
)

哦亲爱的。SQL 说:

The column 'NAME' was specified multiple times.

原因:SQL 只能在每个列名都是唯一的情况下才能创建表。

明显的解决方案:给“第二个表”中的每个列名一个别名。

我的问题是我正在使用的实际表有大约 40 列。为这些列中的每一列赋予别名似乎是在浪费时间。当然,我不需要每一列,因此可以删除其中的一些,但现在决定我需要哪些似乎也很浪费。

问题:是否有重命名每一列的速记方法?例如,我可以在每个列名后附加 a_2_a吗?

4

2 回答 2

1

好的,你有一个查询,有 2 个连接的表,它返回两个表列(我不在乎你是否加入同一个表本身)。

所以你有两个可能的结果

显示两个列,具有不同的别名 (AS)

SELECT * INTO ##temp_table FROM (
    SELECT a.Name AS NameA, b.Name AS NameB FROM table AS a
    LEFT JOIN table AS b
    ON a.NAME = b.NAME
)

或者,如果您不希望它们重复(因为另一个将返回两次相同的名称)

SELECT * INTO ##temp_table FROM (
    SELECT a.Name FROM table AS a
    LEFT JOIN table AS b
    ON a.NAME = b.NAME
)

如果你有更多的列怎么办?好的,您可以只显示 JOIN 中的一张表

SELECT * INTO ##temp_table FROM (
    SELECT b.* FROM table AS a
    LEFT JOIN table AS b
    ON a.NAME = b.NAME
)

对不起,我的英语不好!我希望这可以帮助你!

于 2013-08-14T22:58:18.653 回答
0

我建议查询sys.tablessys.columns快速获取重命名的字段:

SELECT c.name + '_2,' ColumnName
FROM sys.columns c 
JOIN sys.tables t 
  ON c.object_id = t.object_id  
WHERE t.name = 'YourTable'

或者您可以结合以下OBJECT_ID()功能:

SELECT c.name + '_2,' ColumnName
FROM sys.columns c 
WHERE object_id = OBJECT_ID('YourTable')
于 2013-08-14T23:02:03.347 回答