【发布时间】:2012-01-18 19:29:09
【问题描述】:
例如,我有两个表(临时表)。其中一个只包含 ID,另一个包含真实信息。它们的行号完全相同。
#Table1
ID
14
15
16
#Table2
CarModel Year
Ford 1996
Ferrari 2005
Toyota 2010
如何将这两个表合二为一(没有任何条件,只是结果表有 3 列,无论顺序如何)?我需要它来插入真实表的结果
Cars
ID CarModel Year
而且这个表不使用身份。有一种自己的机制来获取用于插入的 ID。 我无法更改它。
因此,我需要一个如下表之一(排序并不重要):
#Table3
ID CarModel Year
14 Ford 1996
15 Ferrari 2005
16 Toyota 2010
或
#Table3
ID CarModel Year
16 Ford 1996
14 Toyota 2010
15 Ferrari 2005
附:我了解如何使用 CTE 和 row_number() 来做到这一点,但我认为有更简单的方法来完成这项任务。并且可能此代码将在 MS SQL Server 2000 中使用,因此我很乐意查看解决方案的其他变体。
【问题讨论】:
-
row_number()将是实现此目的的方法。但是,如果它们实际上不包含相关数据,我将不得不质疑为什么要在这两个表上进行连接。 -
CTE 和
ROW_NUMBER对我来说似乎是最好的方法。对于 SQL Server 2000,您需要使用identity列或三角连接或使用游标来模拟它。 -
@Tejs 谢谢你的回答。我需要这个加入日期插入到真实(不是临时)表中。而且我需要我插入的行具有我从存储过程中获得的 ID。但我真的不在乎每一行的具体 id 是什么。我只需要它们都来自我的“池”是的,它不是最好的模式,但它是并且我必须使用它。
-
天啊,你真的不应该那样做!不能保证 SQL Server 会保留任何顺序。你不能随便选择一行然后说“嘿,你将有这个 ID 用于一次查询!”。
标签: sql sql-server join sql-server-2000