在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列。给这些列中的每一列添加一个别名似乎浪费时间。当然,我不需要每个列,所以可以放弃其中的一些,但是现在决定我需要哪些也看起来很浪费。
问题:有没有简写方法来重命名每一列?例如,我可以使用_2
或_a
附加每个列名吗?
答案 0 :(得分: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
)
如果你有更多的colums怎么办?好的,你可以在JOIN中显示其中一个表
SELECT * INTO ##temp_table FROM (
SELECT b.* FROM table AS a
LEFT JOIN table AS b
ON a.NAME = b.NAME
)
抱歉我的英语不好!我希望这可以帮到你!
答案 1 :(得分:0)
我建议您查询sys.tables
和sys.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')